使用jQuery禁用输入上的其他文本框

时间:2009-02-26 15:18:57

标签: jquery

我有一个包含多个搜索(文本)字段的表单。当文本输入其中一个字段时,我想禁用其他字段。相反,如果从活动文本字段中删除所有文本,则应重新启用其他字段。

基本想法是这样的(我认为):

$(document).ready(function() {
    $("input[@type=text]").keypress(function(e) {
        if(current textbox has text in it)
        {
            //disable all textboxes that aren't this one
        }
        else
        {
            //enable all textboxes
        }
    });
});

我不清楚找到/使用“不是这一个的所有文本框”的最简单方法是什么。

4 个答案:

答案 0 :(得分:7)

我认为“所有不是这个文本框”的最佳方法是使用not过滤器,如:

$(document).ready(function() {
    $(":text").keyup(function(e) {
        if($(this).val() != '') {
            $(":text").not(this).attr('disabled','disabled');
        } else {
            $(":text").removeAttr('disabled');
        }
    });
});

情侣笔记:

  • 我建议为要包含此行为的所有输入元素提供一个类,并执行input.myfields的选择器,因为它更快/更清洁。
  • 此外,从jQuery 1.3开始,不支持选择器中的@:text是您想要的简写,如果您坚持以这种方式选择它们。
  • 我还认为你想要keyup事件而不是keypress

答案 1 :(得分:2)

我首先禁用它们,然后由于要执行的代码由控件的事件触发,您可以使用this关键字引用具有焦点的控件并重新启用它。

$("input[@type=text]").attr("disabled", true);
$(this).attr("disabled", false);

答案 2 :(得分:1)

我会将登录信息附加到焦点/模糊事件:

$(function() {
    $(':text').focus(function() {
        $(':text').not(this).attr('disabled','disabled');
    }).blur(function {
        if (this.value.length == 0) {
            $(':text').removeAttr('disabled');
        }
    });
})

@attr选择器在1.2中已弃用,并已从1.3中完全删除。在这种情况下,您将要使用:text

答案 3 :(得分:0)

使用not选择器