V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
avatasia
V2EX  ›  jQuery

jQuery的事件执行顺序问题,求解

  •  
  •   avatasia · 2011-07-22 23:53:08 +08:00 · 7895 次点击
    这是一个创建于 4910 天前的主题,其中的信息可能已经有所发展或是发生改变。
    伪代码如下:
    <input id="btn1" type="submit" value="提交" />

    $("btn1").click(function(){
    alert('a');
    });

    $("btn1").click(function(){
    alert('b');
    });

    上面两个事件都会响应,请问,怎么处理才能只触发其中一个事件,两个方法都要有。
    7 条回复    2014-05-26 16:57:08 +08:00
    reus
        1
    reus  
       2011-07-23 00:16:05 +08:00
    “只触发其中一个事件,两个方法都要有”什么意思?
    如果想顺序可以用queue机制
    sparklo
        2
    sparklo  
       2011-07-23 00:20:19 +08:00
    click事件只有一个, 你不加条件判断怎么可能想让他区别两种回应呢?
    chone
        3
    chone  
       2011-07-23 03:59:41 +08:00
    在不需要的触发的时候删除掉handler

    var handlerA = function() {alert('a');};
    var handlerB = function() {alert('b');};
    var btn = $("btn1");

    // fire a
    btn.bind('click', handlerA);
    // fire b
    btn.unbind('click', handlerA);
    btn.bind('click', handlerB);

    或者加一个条件变量,当'click'事件被触发的时候再判断是否执行handler
    var fireA = true;
    var handlerA = function() {if (!fireA) return; alert('a');};
    var handlerB = function() {fi (fireA) return; alert('b');};
    // fire handler b
    fireA = false;
    avatasia
        4
    avatasia  
    OP
       2011-07-23 16:17:35 +08:00
    貌似思路都不错,
    在网上找到这篇文章

    http://shawphy.com/2009/04/how-to-use-queue-and-dequeue.html
    ashchan
        5
    ashchan  
       2011-07-23 18:57:10 +08:00
    如果你只是想让每次点击时,只响应两个回调中的一个(换句话说两个方法轮流执行),那么只要用toggle就行:

    $("#btn1").toggle(function(){ /*handler 1*/ }, function(){ /*handler 2*/ });
    yangg
        6
    yangg  
       2011-07-23 20:08:09 +08:00
    $("#btn1").click(function(e){
    alert('a');
    e.stopImmediatePropagation();
    });
    Honwhy
        7
    Honwhy  
       2014-05-26 16:57:08 +08:00
    @ashchan 我有一个场景,由于第三方元素的影响,toggle所要表现的顺序被打乱了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1116 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 18:28 · PVG 02:28 · LAX 10:28 · JFK 13:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.