我有一个按钮:
<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");
}
你知道为什么会这样,我能做些什么来解决这个问题?
答案 0 :(得分:2)
我建议:
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;
}
});
我认为,问题在于,您通过id
选择事件后将事件绑定到DOM节点,但该绑定发生一次;虽然id
可能会更改DOM节点保持不变(尽管id
属性更改),这意味着只有一个函数绑定到该节点。
我在这里使用的替代方法将点击处理程序绑定到body
元素(尽管你应该绑定到button
的最近的祖先元素,不是 body
,除非你别无选择),然后评估click
事件起源于哪个元素。在这种情况下,this
引用被点击的事件,其中检查了id
属性,如果匹配,则调用相关函数。
参考文献:
答案 1 :(得分:1)
好的 - 这就是你想要的: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函数将不会运行。
当您添加调用onload时:对于第二个id - 当时它不存在于DOM中 - 因此该函数不会绑定到第二个id。
因此,您必须在更改元素ID的位置绑定函数。