Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQueryUI对话框提交处理程序的参数来自哪里?_Javascript_Jquery_Jquery Ui - Fatal编程技术网

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');
      }
   });