2012-01-12 62 views
2

我hvae下面的代碼:如何將此javascript/jQuery轉換爲「不內聯」功能?

$(".openDialog").live("click", function (e) { 
    e.preventDefault(); 

    $("<div></div>") 
    .addClass("dialog") 
    .attr("id", $(this).attr("data-dialog-id")) 
    .appendTo("body") 
    .dialog({ 
     title: $(this).attr("data-dialog-title"), 
     close: function() { $(this).remove() }, 
     modal: true 
    }) 
    .load(this.href); 
}); 
$(".close").live("click", function (e) { 
    e.preventDefault(); 
    $(this).closest(".dialog").dialog("close"); 
}); 

有人能解釋我如何可以斷開的功能形成的行動?我對如何做到這一點感到困惑。

「活」的目的是什麼?在有人建議「開」之前我聽說過。 「比」「更好」,它是如何工作的?

+0

在JavaScript中所有的功能只是值。採用'function callback(){};':現在,在適用範圍內,'callback'僅僅對所述函數對象進行求值。 – 2012-01-12 06:55:38

+0

就問題的第二部分而言,live不推薦使用'on'包含在版本1.7+中,如果您沒有jQuery的最新版本,則嘗試使用委託,目的是將事件處理程序附加到動態添加元素到DOM ... – Rafay 2012-01-12 06:56:47

回答

4

只是打破了功能,然後傳遞函數名稱:

close: closeFunction  

function closeFunction() { 
    $(this).remove() 
} 

$(".close").live("click", closeClick); 

function closeClick(e) { 
    e.preventDefault(); 
    $(this).closest(".dialog").dialog("close"); 
} 

on確實比live更好。兩者都允許您將事件連接到動態添加的內容,但前者效率更高,後者不推薦使用。這裏是你如何使用它

$(document).on("click", ".close", closeClick); 

,或者理想情況下,如果所有這些.close按鈕均是在一個容器中,比如,與id FOO一個div,你能夠以更高效

$("#foo").on("click", ".close", closeClick); 

或jQuery的預1.7你不得不接受delegate

$("#foo").delegate(".close", "click", closeClick); 
3

而且什麼purpos 「活」的?我之前聽到有人建議 「上」。 「比」「更好」,它是如何工作的?

由於jQuery的1.7 .live被棄用:http://api.jquery.com/live/

作爲的jQuery 1.7中,.live()方法被棄用。使用.on()連接到事件處理程序 。老版本jQuery的用戶應該優先使用 .delegate(),而不是.live()。

更多關於新.on()功能:http://blog.jquery.com/2011/11/03/jquery-1-7-released/