2012-05-11 91 views
0

我想創建我自己的基本表單驗證,而不必訴諸重型的,一刀切的插件,我寫了下面的代碼。似乎沒有多少時間我重寫它,並重新開始,我似乎無法讓它工作。jquery基本表單驗證

這個想法是,腳本檢查表單以查看是否所有字段都已完成,如果是,則從提交按鈕中刪除禁用的屬性。

的功能: -

function checkForm(){ 
$('#contact :input').each(function(){ 
    if($(this).attr('value') == null){ 
    var checked = false; 
    } else { 
    var checked = true; 
    } 
}) 
if (checked == true){ 
    alert('all filled in'); 
    //remove disabled attribute from button 
} else { 
    alert('not completed'); 
    //add disabled attribute to button 
} 

} 

並調用該函數的代碼: -

$('#contact :input').blur(function(){ 
    if ($(this).val() <= ''){ 
     $(this).next('.error').show(); 
    } else { 
     $(this).next('.error').hide(); 
     checkForm(); 
    } 
}) 

我一直是這樣折騰了一整天,我在努力找到通過谷歌的答案。

+1

有可能是與你比較'如果($(本).VAL()<= ''){' – TRR

回答

1
function checkForm(){ 
    var checked = true; 
    $('#contact :input').each(function(){ 
    if(!$.trim($(this).val()).length) checked = false; 
    }) 
    if (checked){ 
    alert('all filled in'); 
    //remove disabled attribute from button 
    } else { 
    alert('not completed'); 
    //add disabled attribute to button 
    } 
} 

,並調用函數

$('#contact :input').on('blur', function(){ 
    if (!$.trim($(this).val()).length){ 
     $(this).next('.error').show(); 
    } else { 
     $(this).next('.error').hide(); 
     checkForm(); 
    } 
}) 
+0

補充一下,我之前做了'if(checked)':) - 這個例子似乎是在做我需要做的事情 - 謝謝切斷代碼。 – Andrew

0

修正:

function checkForm(){ 
$('#contact :input').each(function(){ 
if($(this).val() == ''){ 
    var checked = false; 
    } else { 
var checked = true; 
} 
}) 
if (checked == true){ 
alert('all filled in'); 
//remove disabled attribute from button 
} else { 
alert('not completed'); 
//add disabled attribute to button 
} 

} 

$('#contact :input').blur(function(){ 
if ($(this).val() == ''){ 
    $(this).next('.error').show(); 
} else { 
    $(this).next('.error').hide(); 
    checkForm(); 
} 
}) 
+0

感謝您的答案 - 我敢肯定,我以前嘗試過這種方法,但我只是再試一次,它仍然沒有觸發底部的任何警報函數 – Andrew

+0

然後在$(this).val()上添加警報以檢查您獲得的值和您想要獲得的值。 – Rizstien

+0

還會檢查您爲「已檢查」字段獲得了什麼值 – TRR

1

既然你正在創建的「檢查.each()的匿名函數內的變量,檢查的變量在該函數外部對於if(checked == true)測試是不可用的(您會得到'checked is undefined'錯誤)這就是爲什麼你的警報不會觸發。

嘗試先在匿名函數外定義'checked'變量,然後相應地更新它。

function checkForm() { 

    var checked = true; 

    $('#contact :input').each(function() { 
     if ($(this).val() == '') { 
      checked = false; 
     } 
    }) 

    if (checked == true) { 
     alert('all filled in'); 
     //remove disabled attribute from button 
    } else { 
     alert('not completed'); 
     //add disabled attribute to button 
    } 

} 

$('#contact :input').blur(function() { 
    if ($(this).val() == '') { 
     $(this).next('.error').show(); 
    } else { 
     $(this).next('.error').hide(); 
     checkForm(); 
    } 
}) 

這裏是一個jsFiddle的例子。 http://jsfiddle.net/DMLzK/1/

+0

我明白了爲什麼它現在失敗了,謝謝。 – Andrew