0

当我在循环中循环时,我试图匹配数组是否包含用户输入的值,如果是,则消息国家存在。但这不起作用。这是代码:

<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

4 回答 4

2

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

于 2013-06-27T10:31:30.790 回答
2

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

$('#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/

于 2013-06-27T10:41:23.610 回答
0

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

演示

  $('#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");
    });
于 2013-06-27T10:31:17.990 回答
0

根据您的要求,您的代码在小提琴中运行良好。

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

于 2013-06-27T10:31:55.957 回答