2016-11-11 22 views
0

我有一個表單輸入元素的列表,我想運行一個循環。從結果中,我需要運行一些條件語句,以便我們可以使用它們的名稱屬性來驗證它們。我已經使用jQuery,並使用。每個方法循環它們。因此我可以添加/刪除類名到無效的輸入元素。JavaScript表單驗證功能:循環每個項目

用文字描述很難。但代碼塊波紋管纔有意義:

JSFiddle

function formValid() { 
 
    var valid = true; 
 

 
    $('form input').each(function() { 
 
    if ($(this).val() == '') { 
 
     valid = false; 
 
     $(this).addClass('red-border'); 
 
    } else if (true /* if "tel" is not a number */) { // <- here I want to validate using input name attribute 
 
     valid = false; 
 
     $(this).addClass('red-border'); 
 
    } else { 
 
     $(this).removeClass('red-border'); 
 
    } 
 
    }); 
 

 
    return valid; 
 
} 
 

 
$('form').on('submit', function(event) { 
 
    event.preventDefault(); 
 

 
    if (formValid()) { 
 
    alert('Yay!'); 
 
    } 
 
});
.red-border { 
 
    border-color: red !important; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<form action="#"> 
 

 
    <p> 
 
    <input type="text" name="name"> 
 
    </p> 
 
    <p> 
 
    <input type="text" name="tel"> 
 
    </p> 
 
    <p> 
 
    <input type="text" name="email"> 
 
    </p> 
 

 
    <p> 
 
    <button type="submit">Submit</button> 
 
    </p> 
 

 
</form>

+0

這看起來像工作代碼,所以你的問題是什麼? – bassxzero

+0

我想從循環結果中獲取名稱屬性並驗證每個輸入。請參閱關於JS代碼的評論 –

+0

將此內容粘貼到您的每個循環'console.log($(this).attr('name'));' – bassxzero

回答

1

退房小提琴 https://jsfiddle.net/t9ayvken/

CSS:

.red-border { 
    border-color: red; 
} 

HTML:

<form action="#"> 

    <p> 
    <input class="must-validate" type="text" name="name"> 
    </p> 
    <p> 
    <input class="must-validate" type="text" name="tel"> 
    </p> 
    <p> 
    <input class="must-validate" type="text" name="email"> 
    </p> 

    <p> 
    <button type="submit">Submit</button> 
    </p> 

</form> 

JQuery:

/*validation functions for each input type*/ 
function validateName(event){ 
    var $this = $(this); 
    /* validation is done here */ 
    if(false){ 
    $this.removeClass('red-border'); 
    } 
    else { 
    /* not valid*/ 
    $this.addClass('red-border'); 
    } 
} 
function validateTel(event){ 

} 
function validateEmail(event){ 

} 

/*add validation event handlers*/ 
$(document).on('validate','[name="name"]',validateName); 
$(document).on('validate','[name="tel"]',validateTel); 
$(document).on('validate','[name="email"]',validateEmail); 


function formValid() { 
    var valid = true; 

    /*Trigger validation events for all required inputs*/ 
    $('input.must-validate').trigger('validate'); 


/* After validation is complete check to see if any are invalid */  
    if($('input.must-validate.red-border').length){ 
    alert('the form is invalid'); 
    valid = false; 
    } 

    return false; 
    //return valid; 
} 

$('form').on('submit', function(event) { 
    event.preventDefault(); 

    if (formValid()) { 
    alert('Yay!'); 
    } 
}); 
+0

我可能在分配給其他表單的同一文檔中有更多[name =「email」]屬性。 '$(document).on('validate','[name =「name」]',validateName);'這不是一個衝突的原因嗎? –

+0

@AnwarHussain只是將您的觸發器代碼更改爲僅查找當前表單中的輸入。 – bassxzero

0

我建議返回錯誤,而不是一個布爾標誌的列表。

function formValid() { 
 
    var errorMsgs = []; 
 

 
    $('form input').each(function() { 
 
    var msg = [], 
 
     val = $(this).val(); 
 
    
 
    // Check blanks 
 
    if (val == '') 
 
     msg.push(`${$(this).attr('name')} is blank`); 
 
    
 
    // Check numbers 
 
    if ($(this).attr('name') === 'tel' && isNaN(val)) 
 
     msg.push(`${$(this).attr('name')} is not a number`); 
 
    
 
    // Handle results 
 
    if (msg.length > 0){ 
 
     errorMsgs.push(...msg); 
 
     $(this).addClass('red-border'); 
 
    } else { 
 
     $(this).removeClass('red-border'); 
 
    } 
 
    }); 
 

 
    return errorMsgs; 
 
} 
 
$('button').on('click', function(event) { 
 

 
    var errors = formValid(); 
 
    if (errors.length === 0) { 
 
    alert('Yay!'); 
 
    } else { 
 
    alert(errors.join('\r')); 
 
    } 
 
});
.red-border { 
 
    border-color: red !important; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<form action="#"> 
 

 
    <p> 
 
    <input type="text" name="name"> 
 
    </p> 
 
    <p> 
 
    <input type="text" name="tel"> 
 
    </p> 
 
    <p> 
 
    <input type="text" name="email"> 
 
    </p> 
 

 
    <p> 
 
    <button type="submit">Submit</button> 
 
    </p> 
 

 
</form>

+0

也許我無法向您明確表達我的問題。我想要這樣的東西:'if(/ * $(this)attr name is tel == NaN * /){/ *將錯誤類添加到$(this); * /}'也許我可以在裏面添加另一個條件。 –