Javascript 将multiselect中的某些特定选项设置为禁用和选中

Javascript 将multiselect中的某些特定选项设置为禁用和选中,javascript,jquery,Javascript,Jquery,我有一个multiselect框,其中包含一些选项,我可以通过jquery选择或禁用这些选项,但我无法让它们同时执行这两个操作。我如何通过jquery做到这一点 这就是我所做的- 在本例中,我在加载时选择一个选项,然后禁用它,但该选项仍然是不可选择的。我想让它一直处于选中和禁用状态 现在,我使用单击方法通过添加以下行来保持选中状态: $('#multiSelect').click(function() {$('#multiSelectoption[value="three"]').attr('s

我有一个multiselect框,其中包含一些选项,我可以通过jquery选择或禁用这些选项,但我无法让它们同时执行这两个操作。我如何通过jquery做到这一点

这就是我所做的-

在本例中,我在加载时选择一个选项,然后禁用它,但该选项仍然是不可选择的。我想让它一直处于选中和禁用状态

现在,我使用单击方法通过添加以下行来保持选中状态:

$('#multiSelect').click(function()
{$('#multiSelectoption[value="three"]').attr('selected',true);});
编辑:
人们正在发布解决方案,我们在点击时再次选择该选项,我已经在我的问题中发布了该选项。我想知道的是,是否存在更好的解决方案,因为这一个看起来不太好。

这里有一小段jQuery来解决您的问题

 $("#multiSelect option").click(function()
 {
      $("#multiSelect option[value='three']").prop("selected", true);
 });
js小提琴:

jquery:


如果重点是防止设置后更改选择框的值,则应禁用选择框,而不仅仅是选项项

$('#multiSelect option[value="three"]').prop('selected',true);
$('#multiSelect').prop('disabled',true);
请参阅此小提琴进行演示:


另外,prop和attr之间的区别在于attr获取/设置反映元素初始状态的元素属性,而prop获取/设置其表示DOM节点当前状态的属性。有关更多信息,请参阅。

我想您可以在创建小部件后调用的multiselect的创建事件中处理该问题

下面是我正在处理的当前应用程序中使用的代码片段

create: function (event, ui) {
    $(this).multiselect("widget").find(":checkbox").each(function () {
        var checkBoxValue = $(this).val();
        // Using linq.js to query the fields and determine whether
        // the field is required in my case.
        // Replace this if statement with your own logic here
        if (Enumerable.From(CHAMP.cache.fields).Count(function (x) {
            return x.Id.toString() == checkBoxValue && x.IsRequired == true;
        }) > 0) {
            $(this).attr("checked", "checked");
            $(this).attr("disabled", "disabled");
        }
    });
}

为了便于参考,jQuery的prop方法应该用于selected和disabled等布尔属性,您可以通过将属性作为对象传递来将它们组合在一起:$'multiSelect option[value=three]'。prop{disabled:true,selected:true};你好@ishan,请检查我的更新答案。我已经在我的问题中发布了这个点击解决方案。请检查我更新的问题。您的小提琴显示它并非始终处于选中状态,而是处于禁用状态。如果我们点击其他选项,选择将丢失。就为了这个,我用了这个代码。您已经为单击编写了任何代码。您刚刚在Load上完成了这项工作,重点是在其他选项仍然可用时,防止仅更改其中一个选项。同样,我已经有了此解决方案,并且正在寻找更优雅的解决方案。在单击时再次选择该选项看起来不太好。它必须看起来像一个固定的选项。
create: function (event, ui) {
    $(this).multiselect("widget").find(":checkbox").each(function () {
        var checkBoxValue = $(this).val();
        // Using linq.js to query the fields and determine whether
        // the field is required in my case.
        // Replace this if statement with your own logic here
        if (Enumerable.From(CHAMP.cache.fields).Count(function (x) {
            return x.Id.toString() == checkBoxValue && x.IsRequired == true;
        }) > 0) {
            $(this).attr("checked", "checked");
            $(this).attr("disabled", "disabled");
        }
    });
}
<select multiple="multiple" size="3">
    <option value="1" selected>One</option>
    <option value="2" disabled>Two</option>
    <option value="3" disabled>Three</option>
</select>