根据元素的id对其调用不同的事件
Call different events on an element depending on its id
我有一个按钮:
<button id="end-action">End action</button>
我正在尝试更改按钮的文本和id以响应单击事件。
$("#end-action").click(endAction);
$("#end-turn").click(endTurn);
当我点击按钮时,它成功地调用了endAction函数(如下),并正确地将按钮的id设置为"end turn"。但是,当按钮的id为"end turn"时,如果我单击该按钮,仍然会调用"end action"id事件处理程序。
function endAction(){
$("#end-action").text("End Turn");
$("#end-action").attr("id", "end-turn");
}
function endTurn(){
$("#end-turn").text("End Action");
$("#end-turn").attr("id", "end-action");
}
你知道为什么会这样吗?我能做些什么来解决这个问题吗?
我建议:
function endAction() {
$("#end-action").text("End Turn");
$("#end-action").prop("id", "end-turn");
}
function endTurn() {
$("#end-turn").text("End Action");
$("#end-turn").prop("id", "end-action");
}
$("body").on('click', '#end-action, #end-turn', function(){
switch (this.id) {
case 'end-turn':
endTurn();
break;
case 'end-action':
endAction();
break;
}
});
JS Fiddle演示。
我认为,问题是,在通过事件的id
选择它之后,您将事件绑定到DOM节点,但该绑定只发生一次;并且当CCD_ 2可能改变时DOM节点保持不变(尽管CCD_ 3属性改变),这意味着只有一个函数绑定到该节点。
我在这里使用的替代方法是将单击处理程序绑定到body
元素(尽管你应该绑定到button
的最近祖先元素,而不是body
,除非你没有替代方法),然后评估click
事件源自哪个元素。在这种情况下,this
指的是被单击的事件,它检查了id
属性,如果匹配,调用相关函数。
参考文献:
- CCD_ 10
- CCD_ 11
好的-这是你想要的吗:http://jsfiddle.net/Fs24R/
$("#end-action").click(endAction);
function endAction(){
$("#end-action").text("End Turn");
$("#end-action").attr("id", "end-turn");
$("#end-turn").click(endTurn);
}
function endTurn(){
$("#end-turn").text("End Action");
$("#end-turn").attr("id", "end-action");
$("#end-action").click(endAction);
}
解释:当您更改id时-您必须设置onclick函数-因为页面不会再次加载-因此初始的onload函数不会运行。
当您添加对第二个id的调用onload:forsecond-id时,它当时不在DOM中,因此该函数不绑定到第二个id。
因此,您必须在更改元素ID的位置绑定函数。
相关文章:
- angularjs调用事件中控制器的一个函数
- CSS + jQ插件阻止AJAX调用/事件侦听器工作
- 如何使用webbrower对象中的脚本调用C#事件
- API Google Maps Javascript在上下文菜单中调用事件侦听器
- 调用事件处理程序oop内部的函数
- 砖石事件:在图像加载和布局完成后调用事件
- jwplayer在80%的视频上调用事件
- 显示和隐藏上下文菜单时的 Jstree 调用事件
- 如何只调用一次事件处理程序,而不是每次单击项目时调用事件处理程序
- 调用事件侦听器 - 两种方式之一起作用,有什么区别
- 在页面加载时调用函数,而不是在单击时调用事件
- jQuery 动态调用事件侦听器
- 在模块化 JavaScript 中调用事件
- 在Bootstrap面板展开中调用事件
- 如何根据变量指定是否可以调用事件侦听器
- 调用事件中带有参数的函数
- SelectAll不调用事件处理程序
- 可以以编程方式调用事件处理程序吗?
- JS中的函数调用事件
- Ionic 2:调用事件同时订阅和取消订阅