Javascript jQueryUI对话框提交处理程序的参数来自哪里?
请看下面的代码:Javascript jQueryUI对话框提交处理程序的参数来自哪里?,javascript,jquery,jquery-ui,Javascript,Jquery,Jquery Ui,请看下面的代码: this.dialog({ width: 500, height: 260, title: "Setup database", content: $("<form>").append(table), buttons: {
this.dialog({
width: 500,
height: 260,
title: "Setup database",
content: $("<form>").append(table),
buttons: {
submit: function(_alert, dialog) {
dialog.find("form").each(function() {
var arr = $(this).serializeArray();
var data = {
mysql: true
};
var empty = false;
$(this).find("input").removeClass("error");
for (var k in arr) {
if ($.trim(arr[k].value) !== "") {
data[arr[k].name] = arr[k].value;
} else {
empty = true;
$(this).find("input[name='" + arr[k].name + "']").each(function() {
$(this).addClass("error");
});
break;
}
}
if (!empty) {
self.ajax({
url: url,
data: data
}, function(result) {
callback(result);
}, function() {
self.mysql(url, callback, _db_name, _db_user, _db_pass, is_dialog);
});
}
_alert.remove();
if($.isFunction(callback_submit)) {
callback_submit();
}
});
}
}
});
this.dialog({
宽度:500,
身高:260,
标题:“设置数据库”,
内容:$(“”)。附加(表格),
按钮:{
提交:功能(_警报,对话框){
dialog.find(“form”).each(function(){
var arr=$(this.serializeArray();
风险值数据={
mysql:是的
};
var empty=false;
$(this.find(“input”).removeClass(“error”);
用于(arr中的var k){
如果($.trim(arr[k].value)!=“”){
数据[arr[k].name]=arr[k].value;
}否则{
空=真;
$(this).find(“输入[name=”+arr[k].name+“]”)。每个(函数(){
$(this.addClass(“错误”);
});
打破
}
}
如果(!空){
self.ajax({
url:url,
数据:数据
},函数(结果){
回调(结果);
},函数(){
mysql(url、回调、\u db\u名称、\u db\u用户、\u db\u pass、is\u对话框);
});
}
_alert.remove();
if($.isFunction(回调\提交)){
回调_submit();
}
});
}
}
});
有两个参数被传递到匿名函数中,当单击按钮“submit”时应该触发该参数。但我不知道这些参数应该来自哪里。有人能解释一下吗?这通常与在Javascript中向匿名函数传递参数有关吗?我认为在jquery ui对话框上触发按钮事件回调时,不会向您传递任何参数
传递给您的唯一参数是常用的jQuery事件对象。第一个参数
\u alert
是传递给JavaScript中每个事件处理程序的JS事件对象。这不是特定于jQuery的:
W3C方式
遵循W3C标准的浏览器总是将事件对象作为
处理程序的第一个参数
例如:
element.onclick = function(event) {
// process data from event
}
最后,他们确认我
指定对话框上应显示的按钮。上下文
回调的第一个元素是dialog元素;如果您需要访问
按钮,它可用作事件对象的目标
我。但是,不确定第二个参数(
对话框
在您的例子中)的作用。我的示例代码中没有传递它 只有一个参数传递给submit,即单击按钮时按钮本身的事件对象。因此,上下文集是submit按钮,如果需要访问对话框并对其进行修改,可以通过访问event.target属性来实现
this.dialog({
buttons: {
submit: function(event) {
$(event).dialog('close'); //is the same as...
$(this).dialog('close');
}
});
第二个参数应该是未定义的,不适用。在OP的代码中有第二个参数
对话框
,它在事件处理程序中使用。它必须来自某个地方,除非它是当前作用域上的一个变量。你说得对,它必须在更高的范围内。似乎正在传入一个已存储的对话框实例,看起来像。实际上不是。它将被函数(foo,bar)
定义覆盖,在较小的范围内仍然是未定义的。请看我更新的fiddle。啊,事实上,如果您打算使用具有相同名称的外部var,您需要将其从定义中删除。表示处理程序的内部已损坏。此代码实际工作吗?你能把它简化成一个有效的例子,并用它来构建一个模型吗?
this.dialog({
buttons: {
submit: function(event) {
$(event).dialog('close'); //is the same as...
$(this).dialog('close');
}
});