2011-12-27 90 views
4

我有一個無法解決的問題。.live()to .on()問題

此代碼適用於我。

// click row opens message, unless you click delete  
$('.delete_message-link-js').live('click', function(e) { 
    e.preventDefault(); 
}); 

$('.item-message').live('click', function(e){ //.item-message - tr lass 
    window.location = $(this).find(".show_message-link").attr("href"); 
}); 

但是,當我改變.live()。對()

// click row opens message, unless you click delete 
$('.delete_message-link-js').on('click', false); 

$('.item-message').on('click', function(e){ 
    window.location = $(this).find(".show_message-link").attr("href"); 
    }); 

我有在Firefox中的錯誤。當我點擊在錶行.delete_message鏈接-JS鏈接我得到一個錯誤

提示用戶
擲Components.Exception ...用戶」,Cr.NS_ERROR_NOT_AVAILABLE)中止;

但代碼工作在Safari。

什麼,我做錯了什麼?

謝謝,對不起,我的英語

+0

在加載頁面後,是否會動態添加'.delete_message-link-js'鏈接? – 2011-12-27 11:18:24

+0

可否請您在http://jsfiddle.net – diEcho 2011-12-27 11:25:29

回答

0

您需要將.on()附加到項目的父:

// Pseudocode... 
$('#parent of .delete_message-link-js').on('click', '.delete_message-link-js', false); 
9

閱讀文檔:

http://api.jquery.com/on/

從這裏我們可以看出,on相當於此:

$('.delete_message-link-js').live('click', function(e) { 
    e.preventDefault(); 
}); 

是:

$(document).on("click", ".delete_message-link-js", function(e){ 
    e.preventDefault(); 
}); 

依此類推。

你也可以閱讀源代碼,看看如何live轉化爲on

live: function(types, data, fn) { 
    jQuery(this.context).on(types, this.selector, data, fn); 
    return this; 
} 

this.contextdocumentthis.selector(因爲你沒有給任何上下文默認的上下文)是'.delete_message-link-js'對於上面的例子。

+0

上做一個'小提琴'以便更好地理解你錯了。不要看下面['那個頁面]](http://api.jquery.com/on/)? -1 '$( 「P」)上( 「點擊」,函數(){ 警報($(本)的.text());' })。 – diEcho 2011-12-27 11:24:03

+2

@diEcho哈哈? http://jsfiddle.net/ncYJj/ – Esailija 2011-12-27 11:28:35

+0

謝謝。現在它的工作! – gnatok86 2011-12-27 11:30:06