jQuery $ .each循环不能正常工作

时间:2013-06-27 10:20:45

标签: jquery json each

当我循环遍历循环时,我正在尝试匹配,如果数组包含用户输入的值,如果是,那么消息国家存在。但这不起作用。这是代码:

<input type="text"  id="topics" >
<a id="submit-button" href="#">button</a>

$('#submit-button').click(function(){

    var isCountry = $("#topics").val();

    $.each(topics, function(i, item) {
        if(isCountry == topics[i].value){

             alert("country exists");
        }else{
            alert("country doesn't exists");
        }
        });

});

完整代码在这里:http://jsfiddle.net/4XHPY/

谢谢你们

4 个答案:

答案 0 :(得分:2)

您的代码正常运行。它只是循环遍历您的数组(存储在主题变量中),如果输入的值等于第i个值,则会在每个步骤上发出消息。因此,如果您进入阿尔及利亚,那么在第三次迭代中您将看到一条消息“国家存在”,在所有其他迭代中您将看到“国家不存在”。

答案 1 :(得分:1)

在你的代码中,每个循环都会被迭代,直到主题对象的长度为止,这就是为什么要多次发出警报的原因。 而不是那样,使用以下脚本:

$('#submit-button').click(function(){

    var isCountry = $("#topics").val();
     var filtered = $(topics).filter(function(){
        return this.value == isCountry;
    });
    if(filtered.length == 0){
         alert("country doesn't exists");
    }else{
         alert("country exists");
    }

});

以下是工作演示:http://jsfiddle.net/4XHPY/12/

答案 2 :(得分:0)

您可以使用它,也可以使用小写,这似乎更合适:

DEMO

  $('#submit-button').click(function () {

        var isCountry = $("#topics").val(),
            exists = false;

        $.each(topics, function (i, item) {
            if (isCountry.toLowerCase() == topics[i].value.toLowerCase()) {

                exists = true;
                return false;
            }
        });
        if (exists) alert("country exists");
        else alert("country doesn't exists");
    });

答案 3 :(得分:0)

根据您的要求,您的代码在小提琴中正常工作。

如果输入值在数组中,则显示警告消息“country exists”。但由于您正在为“主题”数组的每个索引发出循环警报消息,因此它还会显示“国家/地区不存在”警报以及“国家/地区存在”警报消息。