为jquery.ui.dialog 增加“在当前鼠标位置打开”的功能。参考"wind"的方法,感谢"wind",感谢 jww测试。(已兼容ie7,8,firefox3.5,chrome4)4)...

在使用jquery.ui.dialog的过程中,发现position参数有些问题,无法通过position: [PosX, PosY]动态传递位置参数。下面是官方demo 代码:

 $( " #dialog " ).dialog({
                bgiframe:  true ,
                autoOpen:  false ,
                 position: [PosX, PosY], // alert 出来为:"  ,  "(不含双引号),或者报错,不知什么原 因。              
                height:  300 ,
                modal:  true
                buttons: {
                    
' 创建新账号 ' function () {
                        
var  bValid  =   true ;
                        allFields.removeClass( ' ui-state-error ' );

                        bValid  =  bValid  &&  checkLength(name,  " username " 3 16 );
                        bValid  =  bValid  &&  checkLength(email,  " email " 6 80 );
                        bValid  =  bValid  &&  checkLength(password,  " password " 5 16 );

                        bValid  =  bValid  &&  checkRegexp(name,  / ^[a-z]([0-9a-z_])+$ / i,  " Username may consist of a-z, 0-9, underscores, begin with a letter. " );
                        
//  From jquery.validate.js (by joern), contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/
                        bValid  =  bValid  &&  checkRegexp(email,  / ^((([a-z]|\d|[!#\$%&'\*\+\-\ / = \ ? \ ^ _`{\ | } ~ ] | [\u00A0 - \uD7FF\uF900 - \uFDCF\uFDF0 - \uFFEF]) + (\.([a - z] | \d | [ ! #\$ %& ' \*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, "eg. ui@jquery.com");
                        bValid = bValid && checkRegexp(password, /^([0-9a-zA-Z])+$/, "Password field only allow : a-z 0-9");

                        if (bValid) {
                            $( ' #users tbody ' ).append( ' < tr > '  +
                            
' < td > '  + name.val() +  ' < / td>' +
                             ' <td> '   +  email.val()  +   ' </td> '   +
                            
' <td> '   +  password.val()  +   ' </td> '   +
                            
' </tr> ' );
                            $( this ).dialog( ' close ' );
                        };
                    },
                    取消:  function () {
                        $( this ).dialog( ' close ' );
                    }
                },

                close:  function () {
                    allFields.val( '' ).removeClass( ' ui-state-error ' );
                }

            }); 

        后来参考"wind"的为jquery.ui.dialog 增加“自动记住关闭时的位置”的功能。,在他的建议下,完全照葫芦画瓢写了个jquery.ui.dialog的重载方法,实现在鼠标当前位置打开dialog

       代码如下: 

 ///

// /
//
指定 jquery.ui.dialog打开时的位置
//
/
( function ($) {
    
var  originOpen  =  $.ui.dialog.prototype.open
    $.ui.dialog.prototype.open 
=   function () {
        
// var     event= window.event || arguments.callee.caller.arguments[0];
         // var event = event || window.event;
         var  event  =  getEvent();
        
// alert(event) // ie 和 ff下,都显示 "[object]" 
         var  PosX  =   0 ;
        
var  PosY  =   0 ;
        
if  (event.pageX  ||  event.pageY) {
            PosX 
=  event.pageX;
            PosY 
=  event.pageY;
        }
        
else  {
            PosX 
=  event.clientX  +  document.body.scrollLeft  -  document.body.clientLeft;
            PosY 
=  event.clientY  +  document.body.scrollTop  -  document.body.clientTop;
        };
        
this .options.position  =  [PosX, PosY];
        
// alert(this.options.position);
        originOpen.apply( this , arguments);
    };

    
function  getEvent() {  // 同时兼容ie和ff的写法 
         if  (document.all)  return  window.event;
        func 
=  getEvent.caller;
        
while  (func  !=   null ) {
            
var  arg0  =  func.arguments[ 0 ];
            
if  (arg0) {
                
if  ((arg0.constructor  ==  Event  ||  arg0.constructor  ==  MouseEvent)
                    
||  ( typeof  (arg0)  ==   " object "   &&  arg0.preventDefault  &&  arg0.stopPropagation)) {
                    
return  arg0;
                }
            }
            func 
=  func.caller;
        }
        
return   null ;
    }
})(jQuery);

  

 再次感谢"wind"。感谢 jww测试。(已兼容ie7,8,firefox3.5,chrome4) 

转载于:https://www.cnblogs.com/yuhe7919/archive/2009/11/24/jquery.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值