JQuery если оператор не работает внутри цикла - PullRequest
0 голосов
/ 09 мая 2018

У меня проблемы с выяснением, в чем здесь проблема. Он не работает, когда я использую '# account-funding -' + i в отчете IF, но работает с '# account-funding-0' . Мне нужно иметь возможность перебирать массив неизвестного количества объектов. Что я делаю не так?

HTML * На странице может быть X количество div .funding-content. Каждый идентификатор с -0 будет увеличиваться с 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 голосов
/ 09 мая 2018

Очевидно, индекс где-то не соответствует элементу.Но вам не нужно делать это так.JQuery предоставляет метод .each() для циклического перемещения по объектам, поэтому вам не нужно беспокоиться ни о чем из этого:

$( '#account-form .funding-content' ).each(function(index, element){
   if(element.val() !== ""){
      // Do something
   }
});
0 голосов
/ 09 мая 2018

Если я правильно понял, вы не получаете право 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>
...