2013-08-22 50 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 
    } 

});