Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在动态创建的元素上返回false_Javascript_Jquery_Dynamic_Delegates_Live - Fatal编程技术网

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

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方

我正试图阻止在动态创建的元素上发生事件。 我试过几种方法,但都不管用

在deafult上,单击包含该类的div会打开一个菜单,我想禁用它。 这是我的代码,请注意,我使用的是jQuery 1.6.4,因此无法使用on方法

    $(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事件?我是说你用的是哪种选择器?所以,如果你澄清一下,我想我真的可以帮你。我会更新我的答案。我想我正确地预测了你做了什么。所以,我尽力回答你的问题。我希望它能帮助你理解。