2011-02-12 90 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