2011-02-12 127 views
0

我有一個表格屬性,像這樣:幫助與定製jQuery驗證功能

onsubmit="return valMyForm(this);" 

而jQuery的功能,象這樣:

function valMyForm(f) { 
    $(f,"input").each(function() { 
     if($(this).length < 1) { 
      alert("All Fields Required."); 
      return false; 
     } 
      else 
      return false; 
    }); 
} 

形式仍然提交即使我刪除所有代碼並只是把return false;

+0

不吹毛求疵,但最後`else`不是必需的。 ;-) – 2011-02-12 19:05:00

+0

@Brad,謝謝,我一直在尋找更短的方式來編寫代碼。 – 2011-02-12 19:05:56

回答

3

return falseeach函數內部是剛剛退出了每個循環的。它不是valMyForm

返回值,您應該使用類似一個合法的變量和返回:

function valMyForm(f) { 
    var valid = true; 
    $("input", f).each(function() { 
     if($(this).val().length < 1) { 
      alert("All Fields Required."); 
      valid = false; 
     } 
    }); 

    return valid; 
} 

這是給你一個工作示例:http://jsfiddle.net/adpMT/

1

當你返回你在.each函數內,所以你實際上沒有返回任何東西從valMyForm方法。

我會建議你避免與JavaScript的混合標記和做到這一點不顯眼:

<form action="/foo" id="myform"> 
    ... some input fields 
</form> 

然後:

$(function() { 
    $('#myform').submit(function() { 
     // see if the form contains some empty inputs 
     return $(this).find(':input[value=""]').length > 0; 
    }); 
}); 
+0

@Darin:我可能是錯的,不知道函數是如何被調用的,但我認爲輸入選擇器也需要反轉,以便:`$('input',f)`。但是,我不知道這個函數是如何被調用的。 – 2011-02-12 19:06:10