2011-12-27 94 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