2013-10-02 28 views
2
//generate toolbar 
var $toolbar = $(".toolbar"); 
$.each(tools, function (i, tool) { 
    $("<img>", tool).appendTo($toolbar); 
}); 
var $tools = $toolbar.find("img"); 

//define drag and drop handlers 
$toolbar.on("dragstart", "img", onDrag); 
$(".canvas").on({ 
    dragenter: false, 
    dragover: false, 
    drop: onDrop 
}); 

//handle commencement of drag 
function onDrag(e) { 
    $o = $(this).clone(); 
    var o = e.originalEvent; 
    o.effectAllowed = "copy"; 
    os = { X: o.offsetX, Y: o.offsetY }; 
} 

jQuery的文檔說爲.on()第三個參數是數據和所述第四參數.on()是事件處理程序,如果第四參數存在。在這種情況下,onDrag是第三個參數,所以它必須被視爲數據?它看起來非常像一個事件處理程序,它應該被聲明爲第四個參數而不是第三個參數。我能在這裏得到一些解釋嗎?jQuery .on數據或事件處理程序?

+2

由於onDrag是一個函數,它將被用作回調函數。在api中,可選參數包含在[]中,意味着它們可以省略。 –

+2

jQuery通過查看類型來判斷您省略了哪些參數。所以如果參數3是一個對象,它就是數據;如果它是一個函數,它是處理程序。 – Barmar

回答

2

帶方括號的參數是可選的,因此如果省略參數selectordata,則handler可能是第二個參數。它足夠聰明,可以識別給出的最後一個參數是函數還是函數引用,並將其用作處理程序。

+0

謝謝發佈。這是關於方括號的非常好的一個。 – Giuseppe