Javascript 在动态创建的元素上返回false
我正试图阻止在动态创建的元素上发生事件。 我试过几种方法,但都不管用 在deafult上,单击包含该类的div会打开一个菜单,我想禁用它。 这是我的代码,请注意,我使用的是jQuery 1.6.4,因此无法使用on方法Javascript 在动态创建的元素上返回false,javascript,jquery,dynamic,delegates,live,Javascript,Jquery,Dynamic,Delegates,Live,我正试图阻止在动态创建的元素上发生事件。 我试过几种方法,但都不管用 在deafult上,单击包含该类的div会打开一个菜单,我想禁用它。 这是我的代码,请注意,我使用的是jQuery 1.6.4,因此无法使用on方法 $(function() { $( document ).delegate( "span.highlight_mkt", "click", function() { return false; }); }); 我也尝试过使用live方
$(function() {
$( document ).delegate( "span.highlight_mkt", "click", function() {
return false;
});
});
我也尝试过使用live方法,但没有任何成功
任何帮助都将不胜感激。也许此链接可以帮助您-> 编辑 你也试过这个
$('span.highlight_mkt').live("click", function (e) {
e.preventDefault();
/* your code here */
});
此选项应停止事件传播:
$(function() {
$( document ).delegate( "span.highlight_mkt", "click", function(e) {
e.preventDefault();
e.stopPropagation();
return false;
});
});
我从您的问题中了解到,您的html表单中有span with highlight_mkt类,并使用选择器或文档附加了click事件。您可以使用Ajax加载,也可以使用相同的类名动态创建其他span 因此,为了防止在动态创建的元素上发生事件,您可以使用容器名称的函数,在其中附加动态创建的元素,如下所示:
$('container_selector span.highligh_mkt').die('click');
$('body').live('click', 'span.some_class', function(e){
// This part is needed in order to check weather it is attached dynamically
// or it is predefined html objects
if($(e.target).closest('#some_container').length==0)
{
//Your code here. Which is doing some cool staff i believe :)
}
});
在此方法中,单击事件将仅激发未动态附加的元素。
如果我理解错误,请澄清你的问题
您所做的是使用.livejQuery函数将事件处理程序附加到文档元素或全局容器。所以这不是一件好事。我稍后会解释
$('body').live('click','span.hihligh_mkt', function(e){
//Your code here. Which is doing some cool staff i believe :)
});
但是,如果要仅对动态创建的图元进行阻止,请执行以下操作:
$('container_selector span.highligh_mkt').die('click');
$('body').live('click', 'span.some_class', function(e){
// This part is needed in order to check weather it is attached dynamically
// or it is predefined html objects
if($(e.target).closest('#some_container').length==0)
{
//Your code here. Which is doing some cool staff i believe :)
}
});
所以在上面,您只需检查事件整流罩元素是动态附加到容器元素还是原始html的一部分。当然,如果使用事件,可以避免这种方法,在DOM就绪时,事件将单独附加到元素,如下面所示
$('span.hihligh_mkt').live('click', funtion(e){});
在这种情况下,只有DOM就绪中存在的元素才能获得处理程序。其他动态附加的元素将没有事件处理程序。除非您不进行跨元素的深度克隆
另一件事是,当您将事件处理程序附加到主体或其他根元素时,它会降低性能。你可以读到它
由于所有.live事件都附加在文档元素中,因此事件
在处理它们之前,选择最长、最慢的路径
这个街区肯定会被解雇吗?尝试添加断点?它已被激发,如果我添加警报,它将弹出。但是它不会停止冒泡。你能给我们你的html和动态加载的html吗?你还能显示冒泡事件的代码吗?这是如何附加的?这是一个来自不同开发人员的旧代码,在这里工作,甚至不在jQuery中。请注意,在项目上使用常规返回false是有效的,但如果它是动态创建的,则不起作用。请使用live再次尝试此操作。使用live也重试此操作,不会成功。请使用$'span.highlight_mkt'。取消绑定'click'?!你完全理解我的问题,但这也不行。您有多少个元素以及如何附加到click事件?我是说你用的是哪种选择器?所以,如果你澄清一下,我想我真的可以帮你。我会更新我的答案。我想我正确地预测了你做了什么。所以,我尽力回答你的问题。我希望它能帮助你理解。