代码之家  ›  专栏  ›  技术社区  ›  AwesomeTown

使用jquery在输入时禁用其他文本框

  •  2
  • AwesomeTown  · 技术社区  · 17 年前

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

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

    $(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 回复  |  直到 17 年前
        1
  •  7
  •   Paolo Bergantino    17 年前

    我认为最好的方法是使用 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 .
        2
  •  2
  •   Josh Stodola    17 年前

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

    $("input[@type=text]").attr("disabled", true);
    $(this).attr("disabled", false);
    
        3
  •  1
  •   Adam Lassek    17 年前

    我将把登录名附加到焦点/模糊事件:

    $(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中完全删除。在这种情况下,您将要使用:文本

        4
  •  0
  •   Stephen M. Redd    17 年前

    使用 not 选择器