<select name="state" class="select" id="state">
<option value="something">Something</option>
<option value="other">Other</option>
</select>
<input type="text" name="province" class="text" id="province" />
的jQuery
$('#state').change(function () {
if ($('#state Other:selected').text() == "Other"){
$('#province').attr('disabled', false);
alert(1);
} else {
alert(2);
}
});
似乎不起作用。我一定是做错了。
答案 0 :(得分:36)
您应该使用.removeAttr('disabled')
代替.attr('disabled', false)
。你也应该cache your jQuery selectors。
编辑:事后想到这一点。如果要禁用,则可能需要“清空”已输入字段的文本,因此我添加了.val('')
,如果您还想隐藏它,则可以添加.hide()
和{ {1}}这两个案例。
我将this fiddle放在一起,向您展示工作版本:
.show()
.trigger('change')
将“触发”更改事件,在绑定它时有效地运行一次该函数。这样,var $state = $('#state'), $province = $('#province');
$state.change(function () {
if ($state.val() == 'other') {
$province.removeAttr('disabled');
} else {
$province.attr('disabled', 'disabled').val('');
}
}).trigger('change'); // added trigger to calculate initial state
将根据代码运行时选择的状态被禁用/启用。没有它,即使状态不是“其他”,该省也将可用,除非您还将#province
添加到html中的disabled='disabled'
标记。
答案 1 :(得分:3)
您需要将“已禁用”设置为true
才能实际禁用某些内容。例如,如果你想禁用“其他”并启用其他所有内容,那么我建议说:
$('#state').change(function () {
$("#province").attr("disabled", $("#state").val() == "other");
});
这使用$("#province").val()
,这通常是从jQuery的下拉列表中获取所选选项的当前值的首选方法。如果值为“other”,则“disabled”属性设置为true
,否则设置为false。