2011-09-01 97 views
4

爲什麼此代碼(see code at jsfiddle)綁定點擊和生活單擊

$(document).ready(function() { 
    var html = '<div><a href="javascript:">click me</a></div>'; 
    var $div = $(html); 
    $div.find('a').bind('click', function() { //attention on bind 
     alert('Hi'); 
    }); 
    $('#test').append($div); 
}); 

,但相同的代碼與.bind('click'.live('click'更換不工作?爲什麼?

謝謝。

+0

你的意思是你用.live替換$(document).ready('click')? –

+0

@Baszz,謝謝。編輯。 – Kirzilla

回答

5

jQuery documentation說:

DOM遍歷方法不支持尋找元素髮送到 .live()。相反,.live()方法應該始終在選擇器後面直接調用 。

所以,如果你將$div.find('a').bind('click'更改爲$('#test a').live('click'它將工作。

0

也許你不應該用nest來替換$(document).ready和.live('click')。您的問題的原因可能是該文檔尚未完全加載,所以綁定不起作用。

所以你可以試試:

$(document).ready(function() { 
    $('mybutton').live('click', function(){ ... }); 
} 
3

您可以使用委託,而不是像這樣:

var $div = $('<div><a href="javascript:">click me</a></div>'); 
$div.delegate('a', 'click', function() { 
    alert('Hi'); 
}); 
$('#test').append($div); 

JS Fiddle Example

+0

我喜歡它,但是你犯了和OP一樣的錯誤:你使用'$ div'就好像它是全局的,但沒有任何顯示它。 – Tadeck

+0

@Richard D,謝謝你的提示。 +1 – Kirzilla

+0

不確定它有多大的區別?但我已經改變了它。 –

0

您可以將特定HTML元素(此處爲$ DIV> A)上使用.bind(),但.live()函數是不同的:它適用於相同類型的元素(如$(「div> a」))。

所以,你可以在jQuery的.bind(間[差異)比.live()VS .delegate()VS。對()的$('div > a').live('click',