2014-02-15 39 views
1

下面的代碼看看:jQueryUI對話框提交處理程序的參數來自哪裏?

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中將參數傳遞給Javascript中的匿名函數有關嗎?

+0

此代碼是否真的有效?你可以把它減少到一個工作的例子,並與它建立一個[jsfiddle](http://jsfiddle.net)? – simbabque

回答

0

當按鈕事件回調是在jQuery的用戶界面對話框解僱我不認爲你傳遞給你任何參數

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

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

只有你打通你是傳遞參數習慣上的jQuery事件對象。

0

第一個參數_alert是傳遞給JavaScript中每個事件處理函數的JS事件對象。這不是特定於jQuery的。 javascript.info explains this as follows

W3C方式

瀏覽器隨後W3C標準一直傳遞事件對象作爲 處理程序的第一個參數。

例如:

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

jQueryUI API reference他們確認我

指定哪些按鈕應該在對話框上顯示。回調的上下文 是對話框元素;如果您需要訪問 按鈕,則它可用作事件對象的目標。

I illustrated this in a fiddle。不知道第二個參數(你的案例中的dialog)是幹什麼的。它沒有通過我的示例代碼。

+0

第二個參數應該是未定義的,不適用。 – userabuser

+0

在OP的代碼中,還有第二個參數'dialog'用於事件處理程序。它必須來自某個地方,除非它是目前範圍內的一個變量。 – simbabque

+1

正確的,我應該說的是默認情況下,jQueryUI對話框只返回事件對象。你是對的,它必須進一步擴大範圍。似乎是傳入一個已存儲的對話框實例,它看起來像。 – userabuser

0

應該只有一個參數傳遞給提交,它是點擊時按鈕本身的事件對象。所以上下文集是提交按鈕,如果你需要訪問對話框並修改它,你可以通過訪問event.target屬性來實現。

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