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

2011-07-22 23:53:08 +08:00
 avatasia
伪代码如下:
<input id="btn1" type="submit" value="提交" />

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

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

上面两个事件都会响应,请问,怎么处理才能只触发其中一个事件,两个方法都要有。
7894 次点击
所在节点    jQuery
7 条回复
reus
2011-07-23 00:16:05 +08:00
“只触发其中一个事件,两个方法都要有”什么意思?
如果想顺序可以用queue机制
sparklo
2011-07-23 00:20:19 +08:00
click事件只有一个, 你不加条件判断怎么可能想让他区别两种回应呢?
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
2011-07-23 16:17:35 +08:00
貌似思路都不错,
在网上找到这篇文章

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

$("#btn1").toggle(function(){ /*handler 1*/ }, function(){ /*handler 2*/ });
yangg
2011-07-23 20:08:09 +08:00
$("#btn1").click(function(e){
alert('a');
e.stopImmediatePropagation();
});
Honwhy
2014-05-26 16:57:08 +08:00
@ashchan 我有一个场景,由于第三方元素的影响,toggle所要表现的顺序被打乱了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/16049

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX