【问题标题】:Enable/Disable using Radio is not working使用无线电启用/禁用不起作用
【发布时间】:2013-05-13 18:32:42
【问题描述】:

我正在尝试根据用户对单选按钮的选择来禁用/启用下拉框。我有以下 JSFiddle:JSFiddle,它本身就可以正常工作。

$('input[type=radio]').click(function() {
    var r_id = $("input[@name=sc]:checked").attr('id');
    alert(r_id);

    if (r_id == "bName") {
        //enable By Name drop down
        $(".dName").prop('disabled', false);
        //disable By Specialty drop down
        $(".dSpecialty").prop('disabled', true);
    }
    if (r_id == "bSpecialty") {
        //enable By Specialty drop down
        $(".dSpecialty").prop('disabled', false);
        //disable By Name drop down
        $(".dName").prop('disabled', true);
    }
});

以下页面中的相同代码无效:Website Demo

【问题讨论】:

  • 哇。我什至不知道它是如何工作的。 @ 在 jQuery 1.3+ 中甚至不能作为选择器使用,它已经被删除了很长时间。去掉@,没必要。
  • 完成。谢谢。除了下拉框的禁用/启用之外,其他一切都有效。
  • 试试$(".dName").removeAttr('disabled'); 而不是$(".dSpecialty").prop('disabled', false);
  • removeAttr('disabled'); 的反义词是什么? (更新了页面但仍然是同样的问题)
  • 您的网站演示中的 HTML 存在大量验证错误,不确定是否会导致问题。

标签: jquery


【解决方案1】:

我刚刚在我的本地 XAMPP 服务器上运行了您的代码。看来问题来自 selected.jquery.js 文件。如果我从您的 example.jquery.html 中删除此脚本,您将获得预期的行为。

发生的情况是,您从一个 <select> 标记开始,其中包含您的 JS 可以正常工作的所有选项。然而,这个 selected.jquery.js 会创建一个 <div> 块来代替这个 <select> 标记。 'disabled' 属性不再适用于这个新建的<div> 块。

参考: How should disabled <div> act?

这个 selected.jquery.js 文件看起来像一些第三方自定义下拉框。不确定是否已经存在禁用此功能的功能,您可能需要检查 API。如果不是,您需要为此 div 创建一个自定义 CSS 类以使其显示为褪色。

【讨论】:

  • 我与启用和禁用的代码搏斗了几个小时。经过大量的研究和实验,我继续采用不同的解决方案。将很快发布链接:) 感谢您的帮助。
【解决方案2】:

我认为一个点指定了一个类名,并且

class="chzn-select dSpecialty" name="dSpecialty"

有另一个名字...你可以尝试改变它

【讨论】:

    【解决方案3】:

    你能简化一下吗:

    $('input[type=radio].searchCriteria').click(function () {
        $('.chzn-select').prop('disabled', true);//disable all
        $(this).next('.chzn-select').prop('disabled', false);//enable sibling
    });
    

    可能会更好:使用更改处理程序(jQuery 较新版本):

    $('input[type=radio].searchCriteria').on('change',function () {
        $('.chzn-select').prop('disabled', true);//disable all
        $(this).next('.chzn-select').prop('disabled', false);//enable sibling
    });
    

    不带“.on”(直接)的 jQuery 早期版本

    $('input[type=radio].searchCriteria').change(function () {
        $('.chzn-select').prop('disabled', true);//disable all
        $(this).next('.chzn-select').prop('disabled', false);//enable sibling
    });
    

    或者如果您需要动态元素(如果可能,使用包装器 div 等而不是“文档”)

    $(document).delegate('input[type=radio].searchCriteria','change',function () {
        $('.chzn-select').prop('disabled', true);//disable all
        $(this).next('.chzn-select').prop('disabled', false);//enable sibling
    });
    

    【讨论】:

    • 你推荐第二个选项吗?
    • 是的,使用更改应该比点击更好——如果你点击相同的元素,不需要做任何事情。
    • 现在它告诉我,"$('input[type=radio].searchCriteria').on('change',function () {" 对象不支持方法的这个属性。
    【解决方案4】:

    类型、名称、id 和类属性必须用双引号括起来。更新代码: jsfiddle.

    <input type="radio" name="sc" id="bName" class="searchCriteria checked" />
    

    更新

    在这部分代码中

    if (r_id == "bSpecialty") {
                //enable By Specialty drop down
                $(".dSpecialty").prop('disabled', false);
                //disable By Name drop down
                $(".dName").prop('disabled', true);
        }
    

    替换为

      if (r_id == "bSpecialty") {
                    //enable By Specialty drop down
                    $(".dSpecialty").removeAttr('disabled');
                    //disable By Name drop down
                    $(".dName").Attr('disabled', true);
            }
    

    告诉我想要发生的事情

    【讨论】:

    • class=searchCriteria 并且默认为 CHECKED。我做了双引号,但没有工作:(
    • 你打开我发布的链接了吗?有更新的代码,它工作
    • 一开始我的 JS 小提琴是我所做的,它工作得很好,但由于某种原因,它在网站演示页面上不起作用:/
    • 您是否包含了您的 jquery 文件?打开控制台查看是否有错误。
    • 是的,我检查了控制台,没有报告错误:/ 如果你看这个:interfaithmedical.com/chosen/example.jquery.html 你会看到由于某种原因它没有取消禁用功能。
    猜你喜欢
    • 2016-08-11
    • 1970-01-01
    • 2014-08-09
    • 2014-02-17
    • 2017-06-12
    • 2017-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多