JQuery将应用程序从“live”切换到“on”方法

时间:2012-03-27 15:26:14

标签: javascript-events jquery

  

可能重复:
  jQuery 1.7 - Turning live() into on()

只需将我的代码从“live”切换到“on”,有些事件就不再激活了,这里有一个例子,任何人都可以帮忙说出它有什么问题吗?在......之前使用“live”而不是“on”方法100%正确

$('a#doBulkLink').on('click', function (e) {

    createLabelsWithDestinationFolders();

    $('label.moveDocDestinationFolder').on('click', function (e) {

        doSomeAjaxStuffWithLabels();
        e.stopImmediatePropagation();  

    });

    e.preventDefault();
});

谢谢。

4 个答案:

答案 0 :(得分:5)

只需将函数名称更改为live(),就无法将on()替换为on();签名也会发生变化。

$('selector').live('event', function () {

});

......变成......

$(document).on('event', 'selector', function () {

});

在目前的形式中,您拥有的是bind()的直接替代品(其中click()change()等是别名)。因此,处理程序直接绑定到元素,而不是将处理程序绑定到document并利用事件冒泡,这是live()所做的。

答案 1 :(得分:1)

要以与on()相同的方式使用live(),请执行以下操作:

$(document).on('click', 'a#doBulkLink', function() { } );

如此处的文档中所示:http://api.jquery.com/live/

答案 2 :(得分:0)

如果将.on动态插入dom,则定义a#doBulkLink的方式将无效,

尝试,

//replace document with any closest container of 'a#doBulkLink' which is available 
//in dom when this code is executed.

$(document).on ('click', 'a#doBulkLink', function () {
    createLabelsWithDestinationFolders();

    $('label.moveDocDestinationFolder').on('click', function (e) {

        doSomeAjaxStuffWithLabels();
        e.stopImmediatePropagation();  

    });

    e.preventDefault();

});

答案 3 :(得分:0)

我让它工作,固定!!!!,我犯了2个愚蠢的错误:

  • 第一个事件(在#doBulkLink上)不是动态的(它位于页面上存在的隐藏元素上,#s欺骗了我!)
  • 在第二个事件中(在label.moveDocDestinationFolder上)我在我的JQuery“.on”方法语法中使用了$('document')而不是$(document)

所以代码看起来像这样,并且它在100%中正常工作:

// this is not dynamically added element, but still can use ".on" to attach an event to 
// outer div and delegate to a#doBulkLink when clicked
$('div#doBulkLinkBox').on('click', 'a#doBulkLink' ,function (e) {

    createLabelsWithDestinationFolders();

    // these are dynamic elements so let's use "on" to attach a click event
    $(document).on('click', 'label.moveDocDestinationFolder', function (e) { 
        doSomeAjaxFunkWithLabels();
        e.stopImmediatePropagation();  
    });

    e.preventDefault();
});

感谢大家提示!!