【问题标题】:or operator with jquery not working how i'd expect..?或带有 jquery 的运算符无法按我的预期工作..?
【发布时间】:2011-05-21 18:29:30
【问题描述】:
$('input[TYPE="SUBMIT"]').click(function(){
    if ($('input[TYPE="TEXT"').val().length===0 || $('textarea').val().length===0)
    {
        console.log($('input[TYPE="TEXT"').val().length);
        console.log($('textarea').val().length);
        return false;
    }
});

chrome 突出显示我的 if 语句。我真的不明白这里有什么问题。我想我可以为这两个字段添加一个类,但我的布局并不需要它。我是不是写错了?

【问题讨论】:

    标签: jquery jquery-selectors if-statement operators


    【解决方案1】:

    我立即注意到的是

    $('input[TYPE="TEXT"')

    应该是

    $('input[TYPE="TEXT"]')

    但是请注意,进行这样的选择只会检查它找到的第一个文本框/文本区域的长度,而不是每个文本框/文本区域的长度。

    在这种情况下你需要的是这样的:

    $("input[type='submit']").click(function()
    {
        var ok = true;
        $("input[type='text'], textarea").each(function() {
            ok &= ok && $(this).val().length > 0;
        });
        alert(ok ? 'All OK' : 'Not OK :(');
    });
    

    最好给提交按钮一个适当的 ID 和输入元素一些其他属性,这样您就不会意外地在验证中包含其他控件。

    <input type="text" validate="true" />
    
    $("*[validate='true']").each(function() {
        ok &= ok && $(this).val().length > 0;
    });
    

    【讨论】:

    • @ionfish:请查看我的编辑,因为如果我是正确的并且您正在尝试进行验证,那么无论如何您都必须以不同的方式处理它:)
    【解决方案2】:
    ($('input[TYPE=TEXT]').val().length == 0 || $('textarea').val().length == 0)
    

    【讨论】:

    • 虽然您已经发布了更正,但如果至少有一个关于错误的简短解释会更有帮助。
    • 您已删除属性值周围的强制引号。
    【解决方案3】:

    您的'input[TYPE="TEXT"' 似乎在很多地方都缺少],这可能是问题所在吗?

    【讨论】:

      【解决方案4】:

      $('input[TYPE="TEXT"/*]*/')

      你忘了]

      我建议您改用:text 伪选择器;)

      $("input:text");

      :text

      【讨论】:

      • :text 防止使用querySelectorAll。 :o( 专有选择器... grrrr!
      • @patrick_dw 但这是 jQuery 方式!无论哪种方式,如果你真的关心速度,你会给这些输入一个有用的类名。
      • 我想知道使用类名会有多大的不同。 jQuery 是否通过发送到getElementsByClassName 来优化仅类选择器,就像他们对 ID 选择器所做的(我认为)一样?我以为无论哪种方式它都会转到qsa
      • class 是一个属性,就像type 一样,我假设性能并没有太大的不同,实际上class 可能会慢一些,因为支持多个类.但这将是特定于实现的,而且我没有做过任何测试,所以这只是假设。无论哪种方式,我总是尝试使用 qsa 支持的选择器。
      猜你喜欢
      • 2020-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-14
      • 2018-11-14
      • 1970-01-01
      • 2022-12-31
      • 2019-09-23
      相关资源
      最近更新 更多