我已經做了小提琴,所以你可以爲你的測試它自己:JavaScript表單錯誤數組不登記
http://jsfiddle.net/ProjectV1/9XQtb/
的Javascript
我已經編寫了一些簡單的驗證和功能之前創建一個用於表單錯誤的數組,在函數結尾處有一個if語句,如果任何數組== true,那麼它將阻止表單提交的事件處理程序。
實際的問題我已經是自己的作品等形式做了錯誤陣列但如果語句做不工作既確認輸入。
用小提琴自己試試(爲了方便理解,我在輸入旁邊添加了輸入的變量錯誤結果,以方便理解);
重建問題
要傳遞的錯誤== false,則電子郵件必須是有效的,密碼超過6個字符,用戶名超過3個字符。
舉例來說,我已經指出了谷歌的形式。
表適用於非確認輸入
如果你點擊了電子郵件,密碼和用戶名的輸入字段,而沒有選擇確認輸入,並嘗試提交它會像預期的那樣了不得的形式錯誤變量返回true。然後填寫它們以便錯誤在沒有選擇確認輸入字段的情況下返回錯誤,並且表單將按預期提交,因爲錯誤變量返回false。
形式不用於確認輸入
工作,但如果你填寫所有表格字段,這樣的確認輸入一個或兩個包含錯誤,那麼形式還是提出,即使該錯誤輸入字段返回false。
確認輸入只會嘗試驗證,如果它確認自己的輸入返回爲false。
爲什麼會發生這種情況,我該如何預防它?它是否與確認輸入嵌套在if語句中有關。
JavaScript代碼
$(document).ready(function() {
$('#joinForm input').blur(function() {
var id = $(this).attr('id');
joinAjax (id);
});
});
var errors = new Array();
errors[email] = null;
errors[cemail] = null;
errors[password] = null;
errors[cpassword] = null;
errors[username] = null;
function joinAjax (id) {
var val = $('#' + id).val();
if (id == 'email') {
$('#emailMsg').hide();
var reg = /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/;
if (val == '') {
errors[email] = true;
$('#' + id).after('<div id="emailMsg" class="error">' + errors[email] + '</div>');
}
else if (reg.test(val) == false) {
errors[email] = true;
$('#' + id).after('<div id="emailMsg" class="error">' + errors[email] + '</div>');
}
else {
errors[email] = false;
$('#' + id).after('<div id="emailMsg" class="success">' + errors[email] + '</div>');
}
joinAjax('#cemail');
}
if (id == 'cemail') {
$('#cemailMsg').hide();
var reg = /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/;
var email = $('#email').val();
if (reg.test(email) == true) {
if (val != email) {
errors[cemail] = true;
$('#' + id).after('<div id="cemailMsg" class="error">' + errors[cemail] + '</div>');
}
else {
errors[cemail] = false;
$('#' + id).after('<div id="cemailMsg" class="success">' + errors[cemail] + '</div>');
}
}
else {
$('#cemail').val('');
}
}
if (id == 'password') {
$('#passwordMsg').hide();
if (val == '') {
errors[password] = true;
$('#' + id).after('<div id="passwordMsg" class="error">' + errors[password] + '</div>');
}
else if (val.length < 6) {
errors[password] = true;
$('#' + id).after('<div id="passwordMsg" class="error">' + errors[password] + '</div>');
}
else {
errors[password] = false;
$('#' + id).after('<div id="passwordMsg" class="success">' + errors[password] + '</div>');
}
joinAjax('#cpassword');
}
if (id == 'cpassword') {
$('#cpasswordMsg').hide();
var password = $('#password').val();
if (password.length >= 6) {
if (val != password) {
errors[cpassword] = true;
$('#' + id).after('<div id="cpasswordMsg" class="error">' + errors[cpassword] + '</div>');
}
else {
errors[cpassword] = false;
$('#' + id).after('<div id="cpasswordMsg" class="success">' + errors[cpassword] + '</div>');
}
}
else {
$('#cpassword').val('');
}
}
if (id == 'username') {
$('#usernameMsg').hide();
if (val == '') {
errors[username] = true;
$('#' + id).after('<div id="usernameMsg" class="error">' + errors[username] + '</div>');
}
else if (val.length < 3) {
errors[username] = true;
$('#' + id).after('<div id="usernameMsg" class="error">' + errors[username] + '</div>');
}
else {
errors[username] = false;
$('#' + id).after('<div id="usernameMsg" class="success">' + errors[username] + '</div>');
}
}
$('#joinForm').submit(function(event){
if ((errors[email] == true) || (errors[cemail] == true) || (errors[password] == true) || (errors[cpassword] == true) || (errors[username] == true)) {
event.preventDefault();
}
return true;
});
工作實例
http://jsfiddle.net/ProjectV1/9XQtb/3/
更改後POINTYS諮詢
var errors = {};
errors.email = true;
errors.cemail = true;
errors.password = true;
errors.cpassword = true;
errors.username = true;
function joinAjax (id) {
var val = $('#' + id).val();
if (id == 'email') {
$('#emailMsg').hide();
var reg = /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/;
if (val == '') {
$('#' + id).after('<div id="emailMsg" class="error">Enter your email</div>');
}
else if (reg.test(val) == false) {
$('#' + id).after('<div id="emailMsg" class="error">Email invalid</div>');
}
else {
errors.email = false;
$('#' + id).after('<div id="emailMsg" class="success">Email OK</div>');
}
joinAjax('cemail');
}
if (id == 'cemail') {
$('#cemailMsg').hide();
var email = $('#email').val();
if (errors.email == false) {
if (val != email) {
$('#' + id).after('<div id="cemailMsg" class="error">Emails do not match</div>');
}
else {
errors.cemail = false;
$('#' + id).after('<div id="cemailMsg" class="success">Success</div>');
}
}
else {
$('#cemail').val('');
}
}
if (id == 'password') {
$('#passwordMsg').hide();
if (val == '') {
$('#' + id).after('<div id="passwordMsg" class="error">Enter a password</div>');
}
else if (val.length < 6) {
$('#' + id).after('<div id="passwordMsg" class="error">Minimum length of 6</div>');
}
else {
errors.password = false;
$('#' + id).after('<div id="passwordMsg" class="success">Password OK</div>');
}
joinAjax('cpassword');
}
if (id == 'cpassword') {
$('#cpasswordMsg').hide();
var password = $('#password').val();
if (errors.password == false) {
if (val != password) {
$('#' + id).after('<div id="cpasswordMsg" class="error">Passwords do not match</div>');
}
else {
errors.cpassword = false;
$('#' + id).after('<div id="cpasswordMsg" class="success">Success</div>');
}
}
else {
$('#cpassword').val('');
}
}
if (id == 'username') {
$('#usernameMsg').hide();
if (val == '') {
$('#' + id).after('<div id="usernameMsg" class="error">Enter a username</div>');
}
else if (val.length < 3) {
$('#' + id).after('<div id="usernameMsg" class="error">Minimum length is 3</div>');
}
else {
errors.username = false;
$('#' + id).after('<div id="usernameMsg" class="success">Username available</div>');
}
}
$('#joinForm').submit(function(event){
if ((errors.email == true) || (errors.cemail == true) || (errors.password == true) || (errors.cpassword == true) || (errors.username == true)) {
event.preventDefault();
}
return true;
});
}
我解決了所有pointys的建議,並添加了一些我自己的修改。
我將錯誤的默認值更改爲true,只有在需要錯誤時才更改它們。這樣做,我不必在出錯時將其更改爲true。
更改div內的值以顯示錯誤消息。
而不是檢查確認原始輸入確認是否對正則表達式或長度有效,我只是檢查錯誤的值是否是錯誤的。
感謝您的幫助,我希望大家能從中學習。
您可以使用'** bold ** text'創建** bold **文本。 –
好的,謝謝菲利克斯國王 –