在if语句中包含for循环

时间:2013-05-05 15:40:14

标签: javascript jquery if-statement for-loop

我正在构建一个应用程序,当用户在输入框中输入无效值时,我想显示一些错误。如果未找到错误,则将正确的值作为“条目”附加到div。总共有3种情况需要显示错误:

  1. 输入值为空
  2. 输入值是数字
  3. 输入值已存在
  4. 这些错误与if else语句一起显示。 1.和2.很容易,但问题情况(3.)仅对类.cat_entry的第一个元素进行验证。

    if(cat_input == '') { // generate errors
            errorDisplay(error_input_empty);
        } else if(!isNaN(cat_input)) {
            errorDisplay(error_input_number);
        } else if($('.cat_entry') == cat_input) { // THIS IS  THE PROBLEMATIC LINE
            // .cat_entry is the class of the entries that have been appended
            errorDisplay(error_duplicate);
        } else {
            // stuff
        };
    

    所以我相信我需要一个for循环/ .each()(到目前为止没问题),但是如何将它作为if语句中的条件包含在内?像... if( for(i=0;i<$('.cat_entry').length;i++) { ... }; ...当其中一个条目与输入值匹配时,如何返回true(或类似的东西),然后将返回值传递给if语句?

    编辑: here是一个带有相关代码的jsFiddle。我使用$ .inArray()方法更新它。我想尝试使用它而不是for / .each()循环。

3 个答案:

答案 0 :(得分:0)

你可以试试这个:

var a=$('.cat_entry'),o={};
for(i=0;i<a.length;i++) {
  var s=a[i].val();
  if(s in o){
    errorDisplay(error_duplicate);
    return;
  }
  o[s]=true;
}

var o={};
$('.cat_entry').each(function(){
  var s=$(this).val();
  if(s in o){
    errorDisplay(error_duplicate);
    return;
  }
  o[s]=true;
}

答案 1 :(得分:0)

您实际上可以使用jQuery inArray函数,例如:

else if($.inArray(cat_input, $('.cat_entry') != -1) 

}

答案 2 :(得分:0)

解决方案是将其添加到函数中:

var isDuplicate = false;
$('.cat_entry').each(function() {
    if(!$(this).text().indexOf(cat_input)) {
    isDuplicate = true;
}
// And in the if else loop:
else if(isDuplicate == true)
//and just before the function ends
isDuplicate = false;

感谢所有人提供的帮助。