.live()到.on()问题

时间:2011-12-27 11:11:24

标签: jquery

我遇到了无法解决的问题。

这段代码非常适合我。

// 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()更改为 .on()

// 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-link-js链接时出现错误

  

提示被用户中止   用户“,Cr.NS_ERROR_NOT_AVAILABLE)抛出Components.Exception ...

但是代码可以在Safari中使用。

我做错了什么?

谢谢,对不起我的英文

2 个答案:

答案 0 :(得分: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.contextdocument(默认情境,因为您未提供任何上下文),this.selector'.delete_message-link-js',用于上述示例。

答案 1 :(得分:0)

您需要将.on()附加到项目的父级:

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