javascript - 使用 JavaScript 检测复选框更改时的奇怪行为

标签 javascript jquery

我有以下 HTML 代码:

<label class="radio">
    <input type="radio" name="msgTo" value="optiona" checked="checked">
    <i></i>Option A</label>
<label class="radio">
    <input type="radio" name="msgTo" value="optionb">
    <i></i>Option B</label>
<label class="radio">
    <input type="radio" name="msgTo" value="optionc">
    <i></i>Option C</label>
<label class="radio">
    <input type="radio" name="msgTo" value="optiond">
    <i></i>Option D</label>
<label class="radio">
    <input type="radio" name="msgTo" value="optione">
    <i></i>Option E</label>

我正在尝试根据使用此代码检查的选项来执行操作:

$('input[name="msgTo"]:checked').on('change', function() {

    alert('option changed');

    if ($('input[name="msgTo"]:checked').val() == 'optionc') {

        $('#outsideMsgWarning').show();
        $('#destEspecificos').hide();
        $('#locEspecificas').hide();

    } else if ($('input[name="msgTo"]:checked').val() == 'optiond') {

        $('#outsideMsgWarning').show();
        $('#destEspecificos').hide();
        $('#locEspecificas').show();
        $('.my_select_box').trigger('chosen:updated');

    } else if ($('input[name="msgTo"]:checked').val() == 'optione') {

        $('#outsideMsgWarning').show();
        $('#destEspecificos').hide();
        $('#locEspecificas').hide();

    } else if ($('input[name="msgTo"]:checked').val() == 'optionb') {

        $('#outsideMsgWarning').hide();
        $('#destEspecificos').show();
        $('#locEspecificas').hide();
        $('.my_select_box').trigger('chosen:updated');

    } else {

        $('#outsideMsgWarning').hide();
        $('#destEspecificos').hide();
        $('#locEspecificas').hide();
        $('.my_select_box').trigger('chosen:updated');

    }

});

当我选择第二个、第三个、第四个或第五个选项时,没有任何反应(应该隐藏/显示一些选项),但是当我返回第一个选项(这将是 javascript 中的 ELSE)时,会显示警报。该警报仅用于测试目的。

我还尝试在复选框名称中添加方括号 [],但得到了相同的结果。

为什么 JavaScript 不能检测到每一个变化?

提前致谢!!!

最佳答案

设置事件绑定(bind)的初始选择器仅查找选中的单选按钮:

$('input[name="msgTo"]:checked').on('change', function() {

由于默认情况下会预先选中第一个单选按钮,因此只有该单选按钮会受到影响。

将行更改为:

$('input[name="msgTo"]').on('change', function() {

以便组中的所有单选按钮都绑定(bind)到事件处理程序。

关于javascript - 使用 JavaScript 检测复选框更改时的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43785454/

相关文章:

javascript - 如何在 "If condition"中传递 bool 结果

javascript - 指定变量类型可以是两个值中的任意一个

javascript - 将变量传递给 Gatsby graphql 查询中的正则表达式

javascript - Ajax DELETE 查询返回意外对象

javascript - Bootstrap Modal-Manager 禁用溢出

javascript - JQuery 日期选择器返回周数和星期几

JavaScript 在 Internet Explorer 8(和 7)中为 window.print 调用和应用

javascript - 使 vanilla js 轮播适应 ie

javascript - jQuery 内容 slider 在单击后停止工作

jquery - 如何在完成 best_in_place 编辑后触发事件?