我有一个多选框,有一些选项,我可以通过jquery选择或禁用,但我不能让他们同时做两个。我怎么能通过jquery做到这一点?
这就是我在做什么 - JSFiddle
在这个例子中,我在加载时选择一个选项,然后禁用它,但该选项仍然是可选择的。我想一直选择和禁用它。
现在我使用click方法通过添加以下行来保持选择:
$('#multiSelect').click(function()
{$('#multiSelectoption[value="three"]').attr('selected',true);});
编辑:人们正在发布解决方案,我们再次点击选择该选项,我已经在我的问题中发布了。我想知道的是,如果存在一些更好的解决方案,因为这个看起来并不好。
小提琴:
jQuery的:
//disabling on load:
$('#multiSelect option[value="three"]').prop('disabled', true);
$("#multiSelect option").on('click',function() {
$('#multiSelect option[value="three"]').prop('selected',true);
});
如果要点是为了防止选择框的值在设置后被更改,那么你应该禁用选择框而不仅仅是选项。
$('#multiSelect option[value="three"]').prop('selected',true);
$('#multiSelect').prop('disabled',true);
看到这个小提琴演示:http://jsfiddle.net/zKbVm/1/。
此外,prop()
和attr()
之间的区别在于attr()
获取/设置元素的属性(反映元素的初始状态),prop()
获取/设置其属性(表示DOM节点的当前状态)。有关更多信息,请参阅https://stackoverflow.com/questions/5874652/prop-vs-attr。
<select multiple="multiple" size="3">
<option value="1" selected>One</option>
<option value="2" disabled>Two</option>
<option value="3" disabled>Three</option>
</select>
我想你可以在创建小部件后调用的multiselect的create事件中处理它。
下面是我正在使用的当前应用程序中使用的代码片段;
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来解决你的问题。
$("#multiSelect option").click(function()
{
$("#multiSelect option[value='three']").prop("selected", true);
});