根据选择启用/禁用输入(jQuery)

时间:2011-01-04 18:35:54

标签: javascript jquery html css

<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);
    }
});

似乎不起作用。我一定是做错了。

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。