javascript - 根据元素的 id 调用不同的事件

标签 javascript jquery

我有一个按钮:

<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 demo .

我认为问题是,在通过 id 选择事件后,您将事件绑定(bind)到 DOM 节点,但该绑定(bind)发生一次;虽然 id 可能会更改,但 DOM 节点保持不变(尽管 id 属性发生更改),这意味着只有一个函数绑定(bind)到该节点。

我在这里使用的替代方案将点击处理程序绑定(bind)到 body 元素(尽管您应该绑定(bind)到 button 最接近的祖先元素,< em>不是 body,除非你别无选择),然后评估 click 事件源自哪个元素。在本例中,this 指的是被单击的事件,该事件已检查其 id 属性,如果匹配,则调用相关函数。

引用文献:

关于javascript - 根据元素的 id 调用不同的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20307434/

相关文章:

javascript - 以 AngularJS 的方式向 MongoLab 添加一个新的模型字段

javascript - 如果 jQuery 动态加载,jQuery 的 ajax() 不起作用

javascript - CSS:响应式设计,定位卡片以适应任何尺寸的屏幕中间

javascript - jquery html() 的问题

javascript - 保存成功警报只消失一次?

javascript - Chart.js:为数据集设置不同的选项

javascript - 在 react native 中添加 native 基本导入时无法加载包错误

javascript - .change() Jquery 不工作

javascript - 生成选择列表项问题

javascript - object 使用追加的对象问题