SitePoint Sponsor

User Tag List

Results 1 to 1 of 1
  1. #1
    SitePoint Zealot matches's Avatar
    Join Date
    Aug 2006
    Posts
    196
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Can't close popup in Safari 2.04

    Hello all,

    Can someone tell me why this popup will not close in Safari 2.04. I do not have safari, so there is no way for me to debug it. I just know that the offending code is coming up with a null value (only in Safari) Here is a link to working version of the code:

    http://www.php-development.ru/javascripts/popup.php

    Here is the problematic JS popup_exit() on line 113,
    element is for some reason a null value

    Thanks for any help. It very appreciated

    Code:
    // <script>
    
    // Copyright (C) 2005 Ilya S. Lyubinskiy. All rights reserved.
    // Technical support: http://www.php-development.ru/
    //
    // YOU MAY NOT
    // (1) Remove or modify this copyright notice.
    // (2) Distribute this code, any part or any modified version of it.
    //     Instead, you can link to the homepage of this code:
    //     http://www.php-development.ru/javascripts/dropdown.php.
    //
    // YOU MAY
    // (1) Use this code on your website.
    // (2) Use this code as a part of another product provided that
    //     this code will be a small part of this product.
    //
    // NO WARRANTY
    // This code is provided "as is" without warranty of any kind, either
    // expressed or implied, including, but not limited to, the implied warranties
    // of merchantability and fitness for a particular purpose. You expressly
    // acknowledge and agree that use of this code is at your own risk.
    
    
    // USAGE
    //
    // function popup_show(id, drag_id, exit_id, position, x, y, position_id)
    //
    // id          - id of a popup window;
    // drag_id     - id of an element within popup window intended for dragging it
    // exit_id     - id of an element within popup window intended for hiding it
    // position    - positioning type:
    //               "screen-corner", "screen-center"
    //               "mouse-corner" , "mouse-center"
    //               "element-right", "element-bottom"
    // x, y        - offset
    // position_id - for the last two types of positioning popup window will be
    //               positioned relative to this element
    
    
    // ----- Variables -------------------------------------------------------------
    
    var popup_dragging = false;
    var popup_target;
    var popup_mouseX;
    var popup_mouseY;
    var popup_mouseposX;
    var popup_mouseposY;
    var popup_oldfunction;
    
    function popup_display(x)
    {
      var win = window.open();
      for (var i in x) win.document.write(i+' = '+x[i]+'<br>');
    }
    
    // ----- popup_mousedown -------------------------------------------------------
    
    function popup_mousedown(e)
    {
      var ie = navigator.appName == "Microsoft Internet Explorer";
    
      if ( ie && window.event.button != 1) return;
      if (!ie && e.button            != 0) return;
    
      popup_dragging = true;
      popup_target   = this['target'];
      popup_mouseX   = ie ? window.event.clientX : e.clientX;
      popup_mouseY   = ie ? window.event.clientY : e.clientY;
    
      if (ie)
           popup_oldfunction      = document.onselectstart;
      else popup_oldfunction      = document.onmousedown;
    
      if (ie)
           document.onselectstart = new Function("return false;");
      else document.onmousedown   = new Function("return false;");
    }
    
    // ----- popup_mousemove -------------------------------------------------------
    
    function popup_mousemove(e)
    {
      if (!popup_dragging) return;
    
      var ie      = navigator.appName == "Microsoft Internet Explorer";
      var element = document.getElementById(popup_target);
    
      var mouseX = ie ? window.event.clientX : e.clientX;
      var mouseY = ie ? window.event.clientY : e.clientY;
    
      element.style.left = (element.offsetLeft+mouseX-popup_mouseX)+'px';
      element.style.top  = (element.offsetTop +mouseY-popup_mouseY)+'px';
    
      popup_mouseX = ie ? window.event.clientX : e.clientX;
      popup_mouseY = ie ? window.event.clientY : e.clientY;
    }
    
    // ----- popup_mouseup ---------------------------------------------------------
    
    function popup_mouseup(e)
    {
      if (!popup_dragging) return;
      popup_dragging = false;
    
      var ie      = navigator.appName == "Microsoft Internet Explorer";
      var element = document.getElementById(popup_target);
    
      if (ie)
           document.onselectstart = popup_oldfunction;
      else document.onmousedown   = popup_oldfunction;
    }
    
    // ----- popup_exit ------------------------------------------------------------
    
    function popup_exit(e)
    {
      var ie      = navigator.appName == "Microsoft Internet Explorer";
      var element = document.getElementById(popup_target);
    
      popup_mouseup(e);
      element.style.visibility = 'hidden';
      element.style.display    = 'none';
    }
    
    
    // ----- popup_show ------------------------------------------------------------
    
    function popup_show(id, drag_id, exit_id, position, x, y, position_id)
    {
      element      = document.getElementById(id);
      drag_element = document.getElementById(drag_id);
      exit_element = document.getElementById(exit_id);
    
      element.style.position   = "absolute";
      element.style.visibility = "visible";
      element.style.display    = "block";
    
      if (position == "screen-corner")
      {
        element.style.left = (document.documentElement.scrollLeft+x)+'px';
        element.style.top  = (document.documentElement.scrollTop +y)+'px';
      }
    
      if (position == "screen-center")
      {
        element.style.left = (document.documentElement.scrollLeft+(document.body.clientWidth -element.clientWidth )/2+x)+'px';
        element.style.top  = (document.documentElement.scrollTop +(document.body.clientHeight-element.clientHeight)/2+y)+'px';
      }
    
      if (position == "mouse-corner")
      {
        element.style.left = (document.documentElement.scrollLeft+popup_mouseposX+x)+'px';
        element.style.top  = (document.documentElement.scrollTop +popup_mouseposY+y)+'px';
      }
    
      if (position == "mouse-center")
      {
        element.style.left = (document.documentElement.scrollLeft+popup_mouseposX-element.clientWidth /2+x)+'px';
        element.style.top  = (document.documentElement.scrollTop +popup_mouseposY-element.clientHeight/2+y)+'px';
      }
    
      if (position == "element-right" || position == "element-bottom")
      {
        var position_element = document.getElementById(position_id);
    
        for (var p = position_element; p; p = p.offsetParent)
          if (p.style.position != 'absolute')
          {
            x += p.offsetLeft;
            y += p.offsetTop ;
          }
    
        if (position == "element-right" ) x += position_element.clientWidth;
        if (position == "element-bottom") y += position_element.clientHeight;
    
        element.style.left = x+'px';
        element.style.top  = y+'px';
      }
    
      drag_element['target']   = id;
      drag_element.onmousedown = popup_mousedown;
    
      exit_element.onclick     = popup_exit;
    }
    
    // ----- popup_mousepos --------------------------------------------------------
    
    function popup_mousepos(e)
    {
      var ie = navigator.appName == "Microsoft Internet Explorer";
    
      popup_mouseposX = ie ? window.event.clientX : e.clientX;
      popup_mouseposY = ie ? window.event.clientY : e.clientY;
    }
    
    // ----- Attach Events ---------------------------------------------------------
    
    if (navigator.appName == "Microsoft Internet Explorer")
         document.attachEvent('onmousedown', popup_mousepos);
    else document.addEventListener('mousedown', popup_mousepos, false);
    
    if (navigator.appName == "Microsoft Internet Explorer")
         document.attachEvent('onmousemove', popup_mousemove);
    else document.addEventListener('mousemove', popup_mousemove, false);
    
    if (navigator.appName == "Microsoft Internet Explorer")
         document.attachEvent('onmouseup', popup_mouseup);
    else document.addEventListener('mouseup', popup_mouseup, false);
    Last edited by matches; Oct 14, 2007 at 14:39.


Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •