2011-05-21 61 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