2011-10-31 26 views
0

好了,我們大約有30輸入框在我們的頁面,而不是寫一個沒有數據線的每一個,我們有一個簡單的聲明:排除jQuery全局驗證中的某個div?

if($(div).find('input:text[value=""]').length > 0 || 
    $('#checkbox1Wrap').find('input:checkbox:not(:checked)').length > 0 || 
    $('#checkbox2Wrap').find('input:checkbox:not(:checked)').length > 0 || 
    $(div).find('select option:first-child:selected').length > 0 || 
    $(div).find('textarea').val() == "" 
){ 
    $(div).prepend('<p class="field_help"> Please complete all fields before moving to next step</p>'); 
    return false; 
} 

這將檢查所有輸入字段來檢查它們的長度大於0,但我們希望排除某些字段被檢查。

例如:

<input type="text" autocomplete="off" value="" name="ext" id="ext"> 

我們不希望上面的輸入框進行檢查。

我們該如何使if語句跳過某些定義的ID?

回答

4

可以使用.not()方法:

$(div).find('input:text[value=""]').not('#id1, #id2') 

文檔瀏覽:http://api.jquery.com/not/

我要指出,這樣做的一個標準方法是簡單一點,但是,如果你不介意的混合形式與您的HTML標記的業務邏輯:

  1. 在HTML中,添加一個required CSS類的所有必需的元素秒。

  2. 在jQuery中,指定您選擇該類:

    `$(div).find('input.required:text[value=""]')` 
    

現在只有必需的元素進行驗證。有一對夫婦的優點,這種方法:

  • 您可以輕鬆地使用CSS來直觀地表示必填字段
  • 的選擇是簡單的
  • 如果你決定你需要更復雜的驗證,你已經設置爲使用jquery-validation

你可以做同樣的事情向相反的方向使用optional類也一樣,但我覺得required好一點語義。

+0

這聽起來不錯,與.not()相反嗎?所以我們可以執行它,如果它是?如果那有意義的話? – Latox

+0

不確定我關注。如果你使用'.not()',那麼你排除的元素不在集合中,所以你必須在之後'.add()'特定的元素:'.not('。general') .add('#specific')會捕獲'specific'元素,即使它具有'general'類。你是這個意思嗎?否則,你的集合中的所有元素都會被強制執行,對吧? – nrabinowitz

+0

@Latox - 請參閱編輯 - 我在考慮這個,我認爲我上面描述的方法更可取。 – nrabinowitz