jQueryUI Dialog提交处理程序的参数来自哪里?

时间:2014-02-15 12:28:16

标签: javascript jquery jquery-ui

看看以下代码:

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

有两个参数传递给匿名函数,当单击“提交”按钮时,该参数应该触发。但我不知道这些参数应该来自哪里。谁能解释一下?这是否与在Javascript中将参数传递给匿名函数有关?

3 个答案:

答案 0 :(得分:0)

在jquery-ui对话框中触发按钮事件回调时,我认为你没有传递任何参数

http://jsfiddle.net/3d7QC/1577/

buttons: {
    "I've read and understand this": function() {
        console.log(arguments);
        // look at your console
        $(this).dialog("close");
    }

只有你传递给你的参数才是习惯的jQuery事件对象。

答案 1 :(得分:0)

第一个参数_alert是传递给JavaScript中每个事件处理程序的JS事件对象。这不是jQuery特有的。 javascript.info explains this as follows

  

W3C方式

     

遵循W3C标准的浏览器始终将事件对象传递为   处理程序的第一个参数。

     

例如:

element.onclick = function(event) {
 // process data from event
}

jQueryUI API reference他们确认我

  

指定应在对话框中显示哪些按钮。上下文   回调是对话框元素;如果你需要访问   按钮,它可用作事件对象的目标。

illustrated this in a fiddle。但不确定第二个参数(在您的情况下为dialog)是做什么的。它没有在我的示例代码中传递。

答案 2 :(得分:0)

单击时,应该只传递一个参数提交,这是按钮本身的事件对象。因此,上下文集是提交按钮,如果需要访问对话框并进行修改,可以通过访问event.target属性来实现。

  this.dialog({
  buttons: {
      submit: function(event) {
         $(event).dialog('close'); //is the same as...
         $(this).dialog('close');
      }
   });