Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.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 奇怪的jquery事件冒泡_Javascript_Jquery - Fatal编程技术网

Javascript 奇怪的jquery事件冒泡

Javascript 奇怪的jquery事件冒泡,javascript,jquery,Javascript,Jquery,我不确定这是否真的是一个冒泡事件event.stopPropagation()无法解决此问题。情况是: 单击元素类“clickMe”(根据需要单击任意数量) 然后单击li元素。单击事件将根据单击“clickMe”类的次数执行 下面是代码片段: html: 提前感谢您对此问题的帮助或解释。每当“clikMe”元素之一上发生“click”时,您将向元素添加另一个单击处理程序。jQuery代码维护所有这些处理程序,因此在您单击“clickMe”几次之后,会有几个处理程序,它们都会被调用 .live()

我不确定这是否真的是一个冒泡事件
event.stopPropagation()
无法解决此问题。情况是:

  • 单击元素类“clickMe”(根据需要单击任意数量)

  • 然后单击
    li
    元素。单击事件将根据单击“clickMe”类的次数执行
  • 下面是代码片段:

    html:

    提前感谢您对此问题的帮助或解释。

    每当“clikMe”元素之一上发生“click”时,您将向
  • 元素添加另一个单击处理程序。jQuery代码维护所有这些处理程序,因此在您单击“clickMe”几次之后,会有几个处理程序,它们都会被调用

    .live()
    方法不是委派事件处理的最佳方式。如果您使用的是新版本的jQuery,请使用
    .on()
    ,或者至少使用
    .delegate()

    每当在其中一个“clikMe”
    元素上发生“click”时,您将向
  • 元素添加另一个单击处理程序。jQuery代码维护所有这些处理程序,因此在您单击“clickMe”几次之后,会有几个处理程序,它们都会被调用


    .live()
    方法不是委派事件处理的最佳方式。如果您使用的是新版本的jQuery,请使用
    .on()
    ,或者至少使用
    .delegate()
    每次单击
    clickMe
    都要将事件附加到您的li元素
    #test

    为现在和将来与选择器匹配的所有元素附加事件处理程序

    两者分开使用


    每次单击
    clickMe
    都会将一个事件附加到
    #test
    ,这是您的li元素

    为现在和将来与选择器匹配的所有元素附加事件处理程序

    两者分开使用

    小提琴:

    jQuery:

    $(function() {
        var clickme_clicks = 0, clickme_timeout = setTimeout(function(){},0) ;
    
        $('.clickMe').on('click', function(e){
            clickme_clicks++;        
            clearTimeout( clickme_timeout );
            clickme_timeout = setTimeout(function(){ clickme_clicks = 0; },1000);
        });
    
         $('li a', $('#test')).on('click',function(e){
            e.preventDefault();
            //if(clickme_clicks == 0) return;
            alert('clicks: ' + clickme_clicks );         
        })  
    });​
    
    小提琴:

    jQuery:

    $(function() {
        var clickme_clicks = 0, clickme_timeout = setTimeout(function(){},0) ;
    
        $('.clickMe').on('click', function(e){
            clickme_clicks++;        
            clearTimeout( clickme_timeout );
            clickme_timeout = setTimeout(function(){ clickme_clicks = 0; },1000);
        });
    
         $('li a', $('#test')).on('click',function(e){
            e.preventDefault();
            //if(clickme_clicks == 0) return;
            alert('clicks: ' + clickme_clicks );         
        })  
    });​
    


    “将根据点击次数执行”是什么意思?你在哪里计算他们?你打算发生什么?为什么首先要在
    clickMe
    事件处理程序中附加一个click事件处理程序?“将根据单击次数执行”不是我想要实现的。这是我试图解决的问题。啊,那是因为你每次点击都会添加一个处理程序。点击我。因此,当您单击li按钮时,每个处理程序都会执行。这就是为什么会出现多个警报。我实际上是在玩弄代码。这个想法是,只要在“clickMe”上单击鼠标右键,就会触发对li的任何单击。这段代码只是一个例子。你说“将根据点击次数执行”是什么意思?你在哪里计算他们?你打算发生什么?为什么首先要在
    clickMe
    事件处理程序中附加一个click事件处理程序?“将根据单击次数执行”不是我想要实现的。这是我试图解决的问题。啊,那是因为你每次点击都会添加一个处理程序。点击我。因此,当您单击li按钮时,每个处理程序都会执行。这就是为什么会出现多个警报。我实际上是在玩弄代码。这个想法是,只要在“clickMe”上单击鼠标右键,就会触发对li的任何单击。这个片段只是一个例子,我认为这不是他想要的。“点击事件将根据“clickMe”类的点击次数执行。”这是已经发生的事情,他问为什么。@gl3nn我会让OP澄清他的需求。我做了他想做的事。他已经在对他的问题的评论中澄清了自己,我也很困惑。谢谢你的代码。但是就像我之前说的,我真的不需要知道点击次数。是的,通过分离事件侦听器来解决问题(就像你和其他建议解决方案的人一样),我仍然不知道你想做什么,但我很高兴它帮助你做到了这一点。我认为这不是他想要的。“点击事件将根据“clickMe”类的点击次数执行。”这是已经发生的事情,他问为什么。@gl3nn我会让OP澄清他的需求。我做了他想做的事。他已经在对他的问题的评论中澄清了自己,我也很困惑。谢谢你的代码。但是就像我之前说的,我真的不需要知道点击次数。是的,通过分离事件侦听器来解决问题(就像你和其他建议解决方案的人一样),我仍然不知道你想做什么,但我很高兴它帮助你做到了这一点。
    $('.clickMe').on('click', function(e) {
        //e.stopPropagation()
    })
    $('li', $('#test')).on('click', function(e) {
        //e.stopPropagation()
        alert('ouch');
    });
    
    $(function() {
        var clickme_clicks = 0, clickme_timeout = setTimeout(function(){},0) ;
    
        $('.clickMe').on('click', function(e){
            clickme_clicks++;        
            clearTimeout( clickme_timeout );
            clickme_timeout = setTimeout(function(){ clickme_clicks = 0; },1000);
        });
    
         $('li a', $('#test')).on('click',function(e){
            e.preventDefault();
            //if(clickme_clicks == 0) return;
            alert('clicks: ' + clickme_clicks );         
        })  
    });​