jQuery if 语句在 for 循环中不起作用

Posted

技术标签:

【中文标题】jQuery if 语句在 for 循环中不起作用【英文标题】:jQuery if statement not working inside for loop 【发布时间】:2018-10-19 21:27:26 【问题描述】:

我无法找出问题所在。当我在 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.' );
    

【问题讨论】:

也添加您的 html '#account-funding-'+i 确实会导致 '#account-funding-0' 所以我觉得这开始成为一个 XY 问题。您看到什么不起作用? 应该工作。话虽如此,页面可能没有完全加载,这会导致错误。在您发布 HTML 之前很难诊断 拥有一系列像这样的ids 是一种反模式。只需循环通过 $("#account-form .funding-content") 返回的 jQuery 集。 @T.J.Crowder...谢谢您的建议。看起来就像将 一样简单 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

此外,要遍历正确数量的元素,请使用 &lt; 而不是 &lt;=

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

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>

【讨论】:

谢谢。您和@T.J Crowder 的回答最终解决了这个问题。我只需要将

以上是关于jQuery if 语句在 for 循环中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

fillOval() 在 if 语句中不起作用[关闭]

for循环后的最后一个过程语句在pl sql中不起作用

Excel VBA:错误 Goto 语句在 For-Loop 中不起作用

Vue.js:手风琴在 for 循环中不起作用

remaining()在if语句C ++中不起作用

用逗号结束 python 2.7 打印语句在 tmux 中不起作用吗?