1

我有一个文本输入字段和一个复选框。当且仅当在文本字段中有输入时,必须禁用该复选框。我有一个适用于大多数情况的解决方案:

HTML:

<input type="text" id="search" />
<input type="checkbox" id="cb" />
<label for="cb">Enabled only if no search term</label>

jQuery:

$('#search').keyup(function (e) {
    var enable = $(this).val() == 0;
    if (enable) {
        $('#cb').removeAttr('disabled');
    } else {
        $('#cb').attr('disabled', 'disabled');
    }
});

在 jsFiddle 上看到它。

这适用于使用键盘键入或删除文本以及使用键盘粘贴文本时。

如果用户使用右键单击上下文菜单粘贴文本,或者用户按下 IE 添加到输入字段以允许清除输入字段的小“X”,则会失败。

问题

如何改进代码,使其也适用于这些场景?等待文本框失去焦点会提供较差的用户体验。

4

2 回答 2

1

实时验证jQuery 插件解决了这个问题。但是,它目前似乎不适用于委托事件。

实现这一点需要将事件绑定到 keyup 事件,如果您想检测剪切和粘贴时的文本更改,还需要几个其他事件。即使你是 JavaScript 大神,一遍又一遍地编写这个逻辑也是乏味的。聪明点,改用 ZURB 文本更改事件插件。

于 2013-03-11T23:07:16.420 回答
0

您可以使用jquery更改方法:

http://jsfiddle.net/WDMCX/1/

$('#search').change(function() {

    if( $(this).val() === '' ){
        $('#cb').attr('disabled', 'disabled');
    } else {
        $('#cb').removeAttr('disabled');
    }

});
于 2013-03-11T20:19:13.687 回答