在动态创建的元素上返回false

我正在尝试阻止动态创建的元素上的事件。
我尝试了几种方法但没有效果。

聋人,点击包含该类的div打开一个菜单,我想禁用它。
这是我的代码(请注意我使用的是jQuery 1.6.4,因此我无法使用“on”方法)。

$(function() { $( document ).delegate( "span.highlight_mkt", "click", function() { return false; }); }); 

我也尝试使用“实时”方法,但没有任何成功。

任何帮助将非常感激。

也许这个链接可以帮助你 – > 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 */ }); 

这个应该停止事件传播:

  $(function() { $( document ).delegate( "span.highlight_mkt", "click", function(e) { e.preventDefault(); e.stopPropagation(); return false; }); }); 

我从你的问题中理解的是你在html表单中使用highlight_mkt类,并使用选择器或文档附加了click事件。 您正在使用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或其他根元素时,它会降低性能。 你可以在这里阅读它。

由于所有.live()事件都附加在document元素上,因此事件在处理之前会占用最长和最慢的路径。

你可以在这里看到一些例子。