2011-05-21 30 views
0
$('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不工作如何我期望..?

回答

0

它看起来像你有'input[TYPE="TEXT"'在不少地方缺少],可能是这个问题?

2

什么,我立刻注意到的是,

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

应该

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

但是请注意,这使得这样的选择将只检查的长度第一个 textbox/textarea它发现,不是每个人。

,就需要在这种情况下,什么会是这样的:

$("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; 
}); 
+0

哇......尴尬 – ionfish 2011-05-21 18:34:29

+0

@ionfish:请参阅我的编辑,因为如果我是正确的,并且您尝试进行验证,则必须以不同的方式处理:) – SirViver 2011-05-21 18:44:17

0

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

你忘了]

我建议你使用:text伪选择器代替;)

$("input:text");

:text

+0

':text'防止'querySelectorAll'被用过的。 :o(专有选择器... grrrr! – user113716 2011-05-21 18:45:10

+0

@patrick_dw但是它是jQuery的方式!无论哪种方式,如果你真的关心速度,你会给这些输入一个有用的类名 – Raynos 2011-05-21 18:47:32

+0

我想知道使用类名反而会产生多大的差异。jQuery是否通过发送给getElementsByClassName来针对ID选择器进行优化?我认为它会以任何方式进入'qsa'。 – user113716 2011-05-21 18:56:03

1
($('input[TYPE=TEXT]').val().length == 0 || $('textarea').val().length == 0) 
+0

虽然你发布了一个更正,但它会如果至少有一个关于什么是错误的简单解释,那么它会更有帮助。 – lxalln 2011-05-21 18:39:19

+0

您已经从属性值周围删除了强制引号。 – user113716 2011-05-21 18:42:25