我正在尝试阻止动态创建的元素上的事件 我尝试了几种方法但没有效果。
嘲讽,单击包含该类的div会打开一个菜单,我想禁用它 这是我的代码(请注意我使用的是jQuery 1.6.4,所以我无法使用“on”方法)。
$(function() {
$( document ).delegate( "span.highlight_mkt", "click", function() {
return false;
});
});
我也尝试使用“实时”方法,但没有任何成功。
非常感谢任何帮助。
答案 0 :(得分:0)
也许此链接可以帮助您 - > preventDefault
$(document).delegate("span.highlight_mkt", "click", function (e) {
e.preventDefault();
/* your code here */
});
修改强>
你试过这个吗?$('span.highlight_mkt').live("click", function (e) {
e.preventDefault();
/* your code here */
});
答案 1 :(得分:0)
这个应该停止事件传播:
$(function() {
$( document ).delegate( "span.highlight_mkt", "click", function(e) {
e.preventDefault();
e.stopPropagation();
return false;
});
});
答案 2 :(得分:0)
我从您的问题中了解到,您在html表单中使用highlight_mkt类,并使用选择器或文档附加了单击事件。您正在使用Ajax加载或使用相同的类名动态创建其他span。
因此,为了防止动态创建的元素上的事件,您可以使用带有容器名称的.die()函数来附加动态创建的元素,如下所示:
$('container_selector span.highligh_mkt').die('click');
在此方法中,click事件将仅触发未动态附加的元素。 如果我理解错误,请澄清您的问题。
您所做的是使用.live()jquery函数将事件处理程序附加到document
元素或全局容器。所以这不是一件好事。我稍后会解释。
$('body').live('click','span.hihligh_mkt', function(e){
//Your code here. Which is doing some cool staff i believe :)
});
但是,如果您只想阻止动态创建的元素,请执行以下操作:
$('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中存在的元素才会获得处理程序。其他动态附加的元素将不具有事件处理程序。除非你没有深入克隆span元素。
当你将事件处理程序附加到body或其他根元素时,另一件事就是这样,它会降低性能。你可以阅读它here。
由于所有.live()事件都附加在文档元素,事件 在处理它们之前采取最长和最慢的路径。