检查所有元素是否满足for循环条件

时间:2018-04-04 14:35:57

标签: javascript jquery for-loop

我基本上尝试使用以下代码检查所有输入字段是否有效:

 addData (input){

   var isValid = false;    

   for (var i = 0, ii = input.length; i < ii; ++i) {          

      if ($('#' + input[i].id).hasClass('valid')) {
          isValid = true;              
      }
   }

   if (isValid) {
     //do stuff
   }
 }

总的来说input.length是3,我想检查所有3个输入字段是否有效。在我的例子中,它只检查最后一个输入元素。在related posts中,我找不到用for-loop解决它的方法。有人可以帮忙吗?

  

感谢所有有用的答案:最后,我调整了MátéSafranka的答案:

var isValid = input.toArray().every(element => $('#' + element.id).hasClass('valid'))
     

使用.toArray()将jQuery对象转换为Array&gt;&gt; see here了解更多信息。定义truefalse不是   需要更长时间。

5 个答案:

答案 0 :(得分:3)

你弄错了。在元素有效之前,您将无效。你应该假设有效,直到一个元素无效:

addData (input){
   var isValid = true;    

   for (var i = 0, ii = input.length; i < ii; ++i) {          

      if (!($('#' + input[i].id).hasClass('valid'))) {
          isValid = false;              
      }
   }

   if (isValid) {
     //do stuff
   }
}

答案 1 :(得分:3)

您永远不会将isValid设置为false,因此只要至少有一个输入有效,结果就会有效。

最好交换true / false并检查是否有任何无效的,例如:

addData (input){

 var isValid = true;    

 for (var i = 0, ii = input.length; i < ii; ++i) {          
   if (!$('#' + input[i].id).hasClass('valid')) {
      isValid = false;              
   }
 }

 if (isValid) {
  //do stuff
 }
}

注意:有使用循环的替代方法,但这是为了回答在OPs问题中修复循环的明确问题。

答案 2 :(得分:3)

如果input是数组,则可以使用.every()

var isValid = input.every(it => $('#' + it.id).hasClass('valid'));

如果input不是数组,您可以将其转换为Array.from()的数组。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every

注意:正如评论中所指出的,这适用于IE10及更高版本。这在大多数情况下不应该成为问题(Windows 10附带IE11和Edge,理论上每个商业最终用户都应该已经升级),但值得注意的是,如果您必须支持传统平台。

答案 3 :(得分:3)

正如其他人所说,您需要从设置为isValid的{​​{1}}开始,然后从第一个无效字段开始,将其设置为true并打破循环。< / p>

但如果false确实是一个数组,我会改用input

input.every

addData (input){ if (input.every(function(element) { return $(element).hasClass('valid'); })) { // Do stuff } } 调用数组中项目的回调,如果回调返回所有这些项目的真值,则返回Array#every,或返回true(并立即停止)回调永远会返回一个假值。

或者你可以使用jQuery的false

filter
如果您可以使用ES2015 +箭头功能,

addData (input){ if ($(input).filter(':not(.valid)').length === 0) { // Do stuff } } 会更简洁:

Array#every

答案 4 :(得分:0)

<and true isValidtrue(而不是直接分配isValid)会使第一个错误值使整个条件成为假。请确保在循环之前以isValid = true; // inside the loop isValid = isValid && true; 为真。

{{1}}