【问题标题】:Radio input checked with keyboard shortcut doesn't trigger event change使用键盘快捷键检查的无线电输入不会触发事件更改
【发布时间】:2020-01-18 15:25:12
【问题描述】:

我在我的脚本中添加了一个键盘快捷键,这样当我按下ctrl + 1 时,第一个“源”无线电输入就会被检查:

    if (e.key == "1" && e.ctrlKey) {
        document.getElementsByName("source")[0].checked = true;

    }

到目前为止,一切都很好。我添加了一个事件监听器,这样当我的无线电输入的状态发生变化时,就会发生几件事。但是当我按下ctrl+1 时,即使无线电输入的状态发生了变化,这个事件监听器也不会被触发(我可以看到输入的颜色发生了变化)。如果手动单击无线电输入,则事件侦听器正在工作:

var radiosource = document.getElementsByName("source");
for (var i = 0; i < radiosource.length; i++) {
    radiosource[i].addEventListener('change', function (e) {
        var input_changed_id = e.target.id;
        if (input_changed_id.includes("en")) {
            document.getElementById("fr_target").checked = true;
            current_target = "fr";
        }
        if (input_changed_id.includes("fr")) {
            document.getElementById("en_target").checked = true;
            current_target = "en";
        }
        translate();
    });
}

这是full 脚本(参见第 119 行和第 49 行和第 322 行)

【问题讨论】:

    标签: javascript events input radio-button


    【解决方案1】:

    如果您手动更改选中的值,它不会触发,但如果您使用 .click() 模拟单击​​单选按钮,您的事件将触发。

    所以只需将您的键盘快捷键脚本更新为:

    if (e.key == "1" && e.ctrlKey) {
      document.getElementsByName("source")[0].click();
    }
    

    【讨论】:

    • 感谢您的解决方案,但checked = true 不会触发事件?为什么不像click()那样处理它。
    • 因为事件监听器监听用户触发的动作,而不是编程动作。以下是 Mozilla 网络文档的链接以获取更多信息:developer.mozilla.org/en-US/docs/Web/API/Event
    猜你喜欢
    • 2012-07-27
    • 2019-12-30
    • 2011-03-06
    • 2012-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 2018-07-30
    相关资源
    最近更新 更多