jQuery if语句不在for循环

时间:2018-05-09 17:18:14

标签: javascript jquery arrays for-loop each

我无法弄清楚问题在这里。当我在IF语句中使用'#account-funding - '+ i 但它与'#account-funding-0'一起使用时,它不起作用。我需要能够遍历未知数量的对象数组。我做错了什么?

HTML *页面上可以有X个.funding-content div。带-0的每个ID都将从js

递增
<form id="accountform" name="accountForm">

 <div class="funding-content funding-selected-0">
   <div class="container">
    <h3>Funding for [account selected]</h3>

     <div class="funding-type-transfer" id="funding-type-transfer-0">

       <div class="form-inputs">
         <div class="lx-grid lx-grid--gutters">
           <div class="lx-grid__cell lx-grid__cell--1-2--above-md">
             <label for="account-funding-0">Routing Number</label>
             <input id="account-funding-0" type="text" maxlength="9">
           </div>
         </div>
       </div>
     </div>
   </div>
 </div>
</form>

不起作用:

var amountOfAccounts = $( '#account-form .funding-content' ).length;

for ( i = 0; i <= amountOfAccounts; i++ ) {

    if ( $( '#account-funding-'+i ).val() == '' ) {
        document.getElementById( 'account-funding-'+i ).setCustomValidity( 'Routing Number is a required field.' );
    }
}

使用:

var amountOfAccounts = $( '#account-form .funding-content' ).length;

for ( i = 0; i <= amountOfAccounts; i++ ) {

    if ( $( '#account-funding-0' ).val() == '' ) {
        document.getElementById( 'account-funding-'+i ).setCustomValidity( 'Routing Number is a required field.' );
    }
}

2 个答案:

答案 0 :(得分:3)

显然,索引与某个元素不匹配。但是,你不需要像这样做。 JQuery提供了一个 .each() 方法来遍历对象,因此您不必担心任何这些:

$( '#account-form .funding-content' ).each(function(index, element){
   if(element.val() !== ""){
      // Do something
   }
});

答案 1 :(得分:1)

如果我理解正确,你在循环中没有得到正确的id? 如果是,则将您的循环变量设置为let,因此对于此循环,它不会被提升并且是块范围。

此外,要循环使用正确数量的元素,请使用<代替<=

看看这对你有帮助。 (或者我理解它完全错了,如果是这样,我可以做一些调整或删除这个答案)

var amountOfAccounts = $('#account-form .funding-content').length;

for (let i = 0; i < amountOfAccounts; i++ ) {
    var elemValue = $( '#account-funding-'+i ).val();
    if ( elemValue == '' || elemValue == null) {
        console.log('empty value');
    }else{
        console.log(elemValue);
    }
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="account-form">
 <input value="abc" class='funding-content' id="account-funding-0">
  <input value="" class='funding-content' id="account-funding-1">
 <input value="def" class='funding-content' id="account-funding-2">
 <input value="" class='funding-content' id="account-funding-3">
</div>