javascript - 使用 Javascript/jQuery 在复选框选中/取消选中时同时显示/隐藏和启用/禁用

标签 javascript jquery html css checkbox

我有以下看法:

<div>
    <label id = "show_hide_checkbox_label">Text Input?</label>
    <input type ="checkbox" class="myCheckbox" onchange="show_hide_divs()" />
</div>
<div id="text_div" hidden>
    <label id ="emp_id_input_label">Employee ID:</label>
    <input type="text" name="emp_id" id="employee_id_input"></input>
</div>
<div id="select_div">
     <label id= "emp_id_add_label">Employee ID:</label>
     <select name="emp_id" id = "employee_id">
     <option>--Select--</option>
     <option>INCB001</option>
     <option>INCB002</option>
     <option>INCB003</option>
     </select>
</div>

我想做的是:

默认情况下,复选框未选中,文本框隐藏和禁用,选择元素可见,我只能从选择元素中的选项发布数据,不能从文本框发布数据。但是,如果我选中复选框,则选择元素将隐藏和禁用,文本框可见并启用,我只能从文本框而不是从选择元素发布数据。如果我再次取消选中该复选框,行为就会反转,依此类推。

不幸的是,我下面的 jQuery 代码不允许我在复选框更改时正确禁用/启用和显示/隐藏 div。

这是我的 jQuery 代码:

    <script>
        function show_hide_divs()
        {
                if ($('.myCheckbox').is(':checked'))
                {
                    $("div#text_div").show();
                    $("div#text_div").children().prop('disabled', 'false');
                    $("div#select_div").hide();
                    $("div#select_div").children().prop('disabled', 'true');
                }
                else {
                     $("div#select_div").show();
                     $("div#select_div").children().prop('disabled', 'false');
                     $("div#text_div").hide();
                     $("div#text_div").children().prop('disabled', 'true');
                }
        }
    </script>

看来我的 jQuery 代码有问题,只是我自己搞不清楚。

最佳答案

您当前的代码很可能位于 DOM 就绪处理程序中,因此该函数实际上隐藏在包装函数的范围内。

不要在 jQuery 中使用基于属性的事件处理程序。当 jQuery 版本更灵活(支持多个处理程序)时,将事件注册与事件处理程序代码分开是没有意义的。

此外,使用 bool 值进行 bool 属性设置。如果您使用字符串,在某些浏览器中似乎是一个错误:

http://jsfiddle.net/TrueBlueAussie/3me1og4o/2/

$(function () {
    $('.myCheckbox').change(function () {
        if ($(this).is(':checked')) {
            $("div#text_div").show();
            $("div#text_div").children().prop('disabled', false);
            $("div#select_div").hide();
            $("div#select_div").children().prop('disabled', true);
        } else {
            $("div#select_div").show();
            $("div#select_div").children().prop('disabled', false);
            $("div#text_div").hide();
            $("div#text_div").children().prop('disabled', true);
        }
    });
});

这也意味着您可以在处理程序中将 checkbox clicked 引用为 this,这也更好,因为它导致在同一页面上支持多个控件(您会然后开始使其他选择器相对于单击的控件)。

注意:$(function(){}): 只是 $(document).ready(function(){}); 的便捷快捷方式p>

关于javascript - 使用 Javascript/jQuery 在复选框选中/取消选中时同时显示/隐藏和启用/禁用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26755291/

相关文章:

javascript - 有没有办法获取选定区域的底层HTML代码?

javascript - 从数组中的 SQL 捕获 PHP 变量并输出到 JavaScript 变量

javascript - 从父级中的播放按钮在 iframe 内播放 html5 视频

javascript - CSS:如何将彩色图像转换为灰色或黑白图像

javascript - 我如何转动这个每日图像代码来按天但在固定时间而不是午夜更改图像

html - 使 TextArea 填充屏幕顶部,IFrame 填充底部

javascript - 我们如何从 Redux - saga 中的 store.dispatch 返回一个 Promise,以便我们可以等待解析然后在 SSR 中渲染?

javascript - ExtJS 添加面板到面板

javascript - 如何在 AngularJS 中重新加载 subview 而不重新加载整个状态

php - 如何在 ajax url 中发布带空格的波斯语句