2013-08-22 49 views
0

我正在做一个验证的形式,像这样:表单验证使用JavaScript和jQuery

<form id="registerform" method="post" onsubmit=return checkformdata();> 
    <input type="text" name="fname" value=""/> 
    <input type="text" name="lname" value=""/> 
    <input type="checkbox" name="privacy" value="1"/> 
</form> 

checkformdata()的复选框场,这是使用jQuery做验证只有第一个名字和姓氏。 这里是我试过的代码:

jQuery(document).ready(function() { 
    // Handler for .ready() called. 
    jQuery('#registerform').submit(function() { 
    if (!jQuery("#privacy").is(":checked")) { 
     alert("none checked"); 
     return false; 
    } 
    }); 
}); 

这也是工作,但提醒字段是来自例如两次姓名为空,则对第一名称和复选框警报警报大作。我想在checkformdata();之后显示复选框的提示。功能。是否有可能首先给予优先的JavaScript,然后jQuery的验证。

在此先感谢。

+0

这是jQuery代码的'checkformdata()'的内容吗? – SmokeyPHP

+0

您将两个不同的处理程序附加到提交事件。它会运行两次。你为什么不在同一个地方验证一切? – melancia

+0

我在wordpress中使用了一些其他主题。我看到函数checkformdata()是20到25个文件在那里我没有找到主题文件中的验证代码(很难找到),所以我决定使用萤火虫这种方式我检查了这个表单ID和复选框ID这个我正在通过插件使用jquery(不编辑主题文件) –

回答

1

您应该只有一个功能,这是您使用的第二种方法。这两个函数现在都被调用,这不是你想要的。此外,您可以使用$而不是jQuery

不要使用return false!除非你知道你在做什么。使用preventDefault():

$('#registerform').submit(function(event) { 
    var errorString = []; 
    // START VALIDATION 
    if ($("#privacy").is(":checked")) { 
     errorString.push("none checked"); // Save for later 
    } 
    if ($('[name="fname"]').val).length===0) { 
     errorString.push("No firstname"); // Save for later 
    } 
    if ($('[name="lname"]').val).length===0) { 
     errorString.push("No lastname"); // Save for later 
    } 

    // CHECK IF ERRORS ARE FOUND 
    if(errorString.length !==0){ 
     event.preventDefault(); // stop the submitting 
     // Do whatever you like with the string, for example; 
     alert("Something went wrong: \n"+errorString.join("\n")); // alert with newlines 
    } 
    // NO ERRORS FOUND, DO SOMETHING 
    else{ 
     // all good. Do stuff now 
    } 

});