Javascript jQuery属性(“已禁用”)不起作用

Javascript jQuery属性(“已禁用”)不起作用,javascript,jquery,html,jquery-mobile,Javascript,Jquery,Html,Jquery Mobile,我知道这个问题已经被问过很多次了,也回答过很多次了,但是没有一个解决方案对这个例子有效,尽管我知道它们应该有效。也许其他双眼睛将有助于解决这个问题 我已经在设置disabled属性的代码之前和之后放置了警报,该属性确实设置正确,但元素仍然处于禁用状态 我摘录了复制此问题所需的代码: 这里有一些代码只是为了满足SO规则 $(function () { var dbVendor = $("#database-vendor"); $("#uses-db").on("change", f

我知道这个问题已经被问过很多次了,也回答过很多次了,但是没有一个解决方案对这个例子有效,尽管我知道它们应该有效。也许其他双眼睛将有助于解决这个问题

我已经在设置disabled属性的代码之前和之后放置了警报,该属性确实设置正确,但元素仍然处于禁用状态

我摘录了复制此问题所需的代码:

这里有一些代码只是为了满足SO规则

$(function () {
    var dbVendor = $("#database-vendor");
    $("#uses-db").on("change", function (event) {
        event.preventDefault();
        dbVendor.prop("disabled", ($(this).val() == "Yes" ? false : true));
    });
});
数据库供应商已经被jquerymobile包装成一个div和一堆JavaScript。更改select的disabled属性不会导致jQuery Mobile响应并更改其div

删除jQuery Mobile将使代码正常工作


如果您想让它与jQuery Mobile配合使用,那么您需要查看jQuery Mobile API,以了解如何启用其伪选择元素。

与其与propdisabled混为一谈,不如这样做

$dbVendor.selectmenu("enable");
文件


您正在使用jquerymobile,它向元素及其父元素添加禁用ui的类

$(function () {
   $("#uses-db").on("change", function (event) {
      event.preventDefault();
      if($(this).val() == "Yes"){
         $("#database-vendor").parent().removeClass("ui-disabled");
         $("#database-vendor").removeClass("ui-disabled");
         $("#database-vendor").removeAttr("disabled");//edited
      }
      else{
        $("#database-vendor").parent().addClass("ui-disabled");
        $("#database-vendor").addClass("ui-disabled")
        $("#database-vendor").addAttr("disabled");//edited
      }
   });
});

实际工作代码

请查看此解决方案

$(function () {
   var dbVendor = $("#database-vendor");
   $("#uses-db").on("change", function (event) {
        event.preventDefault();
        dbVendor.selectmenu($(this).val() === 'Yes' ? 'enable' : 'disable');
    });
});

Javascript是传递该变量所需的函数范围而不是块范围in@Space ???????? 该变量不在事件处理程序函数的外部作用域中吗?很抱歉,没有看到fiddler attachedStackoverflow具有snippets功能。现在根本不需要使用外部站点来托管实时演示。不相关,但可能只是dbVendor.propdisabled,$this.val!=是的:嗯,当我检查小提琴输出时,我得到了这个:。。。因此divs中隐藏了一个select:FYI,变量是dbVendor而不是$dbVendor+1但是,这个答案是唯一正确使用jQuery移动API的答案。对不起,我在我的jsFiddle.dbVendor.selectmenu$this.val==Yes中将dbVendor更改为$dbVendor?启用:禁用是较短的版本。我在您之前看到了@andalm解决方案,因此您的努力得到了+1。谢谢。虽然这是可行的,但它正在侵入selectmenu插件。最好只执行$database-vendor.selectmenuenable或disable。感谢您的努力,但请尝试打开小提琴上的选择列表。刚刚添加了$database-vendor.removeAttrIsabled;非常感谢,我为此挣扎了几个小时。
dbVendor.selectmenu(($(this).val() == "Yes" ? "enable" : "disable"))