您好,欢迎访问一九零五行业门户网

为jquery.ui.dialog 增加“在当前鼠标位置打开”的功能_jquery

复制代码 代码如下:
$(#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('' +
'' + name.val() + ' ' +
'' + email.val() + ' ' +
'' + password.val() + ' ' +
'
');
$(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)
其它类似信息

推荐信息