代码之家  ›  专栏  ›  技术社区  ›  Russell

jQuery阻止单击后发生其他事件

  •  24
  • Russell  · 技术社区  · 14 年前

    我试图防止多次点击链接和项目,这是造成问题。

    <a><img /></a> ).

    有没有一种方法可以做到一劳永逸,防止在单击发生后触发其他事件?

    或者我必须维护一个名为\u isProcessing的全局变量,并为每个事件处理程序将其设置为true吗?

    编辑:(澄清)

    6 回复  |  直到 14 年前
        1
  •  32
  •   user113716    14 年前

    一种方法是 unbind('click') .bind() 等你准备好了再来一次。

    我宁愿用某种旗子。它可以是一个变量,但我宁愿给元素分配一个类,比如 .processing

    $('someElement').click(function() {
        var $th = $(this);
        if($th.hasClass('processing'))
              return;
        $th.addClass('processing');
        // normal code to run
        // then when done remove the class
        $th.removeClass('processing');
    });
    

    另一种选择是使用元素 .data() 设置类似的标志,比如 $(this).data('processing', true); 完成后将其设置为false。

        2
  •  27
  •   TehOne    14 年前

    event.preventDefault , event.stopPropagation

    $("a").click(function(e) {
        e.preventDefault();
        e.stopPropagation();
        return false;
    }
    
        3
  •  11
  •   brbcoding    11 年前

    你退房了吗?

    $("a").click(function(e) {
        e.preventDefault();
    }
    

    stopImmediatePropagation() stopPropagation()


    one() 事件。

    元素。处理程序在执行 每个元素最多一次。

        4
  •  4
  •   Gintautas Miliauskas    14 年前

    返回 false 从事件处理程序或调用 ev.stopPropagation()

        5
  •  2
  •   elo80ka    14 年前

    你有几个选择:

    1. 如果你的按钮/链接将重新加载 在页面中,您只需解开 单击事件处理程序:

      $('input:submit').click(fumction() {
          $(this).unbind('click');
          // Handle event here 
      })
      
    2. 这也应该适用于 <input type="image"> ):

      $('input:submit').click(function() {
          $(this).attr('disabled', 'disabled');
          // It also helps to let the user know what's going on:
          $(this).val('Processing...');
          // Handle event here 
          $(this).removeAttr('disabled');
      })
      

      我不认为这对链接工作,虽然。

        6
  •  2
  •   Arnold Zokas    12 年前

    event.stopPropagation() event.isPropagationStopped() 对于信号:

    $(button).click(function(e){
        if(e.isPropagationStopped())
            return; // propagation was stopped, so stop further execution
    
        // if you got this far - this event handler was called first
        // custom logic goes here
    
        // stop event propagation to signal other handlers
        e.stopPropagation();
    
        // if you need, call e.preventDefault() to prevent default behaviour
    });
    

    对其他事件处理程序重复相同的逻辑。