只需将我的代码从“live”切换到“on”,有些事件就不再激活了,这里有一个例子,任何人都可以帮忙说出它有什么问题吗?在......之前使用“live”而不是“on”方法100%正确
$('a#doBulkLink').on('click', function (e) {
createLabelsWithDestinationFolders();
$('label.moveDocDestinationFolder').on('click', function (e) {
doSomeAjaxStuffWithLabels();
e.stopImmediatePropagation();
});
e.preventDefault();
});
谢谢。
答案 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个愚蠢的错误:
$('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();
});
感谢大家提示!!