使用JQuery检查邮政编码

时间:2013-02-27 17:14:22

标签: javascript jquery

我尝试构建一个表单,检查输入的邮政编码是否与预定义数组中的邮政编码匹配。我不使用DB,它都是非常基本和硬编码的,但在这种情况下应该足够了。

问题是只有数组中的第一个zip代码(' 83512 ')才有效。如果我进入第二个(' 83533 '),代码会吐出“没有成功”。

我做错了什么?

提前致谢。

HTML:

<form action="javascript:alert('success.');" id="checkplz">
    <label for="plz">ZIP:</label>
    <input type="text" name="plz" id="plz" />
    <button id="submit" >Check!</button>
    <div id="output"></div>
</form>

JQuery的:

$(document).ready(function(){
    var list = ['83512','83533'];
    $("#checkplz").submit(function() {
        for (var i = 0; i < list.length; i++) {
            if ($("#plz").val() == list[i]) {
                $("#output").append("<strong class='success'>success!</strong>").show();
                return true;
            }
            $("#output").text("no success!").show().fadeOut(10000);
                return false;
        }
    });
});

4 个答案:

答案 0 :(得分:3)

循环中的逻辑已关闭。见下文:

$(document).ready(function(){
    var list = ['83512','83533'];
    $("#checkplz").submit(function() {
        var match = false;
        for (var i = 0; i < list.length; i++) {
            if ($("#plz").val() == list[i]) {
                         $("#output").append("<strong class='success'>success!</strong>").show();
                return true;   
            }

        }

        $("#output").text("no success!").show().fadeOut(10000);
                return false;
    });
});

答案 1 :(得分:0)

尝试在循环外返回false,因此只有在检查完所有值后才会发生:

$(document).ready(function(){
    var list = ['83512','83533'];
    $("#checkplz").submit(function() {
        for (var i = 0; i < list.length; i++) {
            if ($("#plz").val() == list[i]) {
                $("#output").append("<strong class='success'>success!</strong>").show();
                return true;
            }
        }
        $("#output").text("no success!").show().fadeOut(10000);
        return false;
    });
});

答案 2 :(得分:0)

使用jQuery.inArray()

var list = ['83512','83533'];
if($.inArray('83533', list) > -1){
    // found
}

文档:http://api.jquery.com/jQuery.inArray/

答案 3 :(得分:0)

问题出在你的循环逻辑中。循环只运行一次,因为循环将始终在第一次迭代后返回(如果它找到列表数组中的第一个元素,则为true,其他所有元素为false),而不是继续执行所有迭代。所以,第二个元素发生的是循环正在运行,确定找不到第一个元素并返回false,甚至从不处理第二个元素。

更好的方法是循环列表数组,直到找到匹配的元素,并跟踪是否找到匹配项。这将确保我们不会退出循环,直到我们处理了数组的所有元素(或找到匹配,在这种情况下我们可以停止循环以节省处理)。

请参阅下文(http://jsfiddle.net/ryanbrill/Kws7A/)以获取一些示例代码,其中包含一些有关正在发生的事情的评论。

$(document).ready(function(){
    var list = ['83512','83533'];
    $("#checkplz").submit(function() {
        var matched = false; // Set up variable to track if we find a match
        $(list).each(function() {
            // Inside the jQuery 'each' method, 'this' equals the current item in the iteration.
            if(this == $("#plz").val()) {
                matched = true; // set the 'matched' variable to true
                $("#output").append("<strong class='success'>success!</strong>").show();
                return; // Since we found a match, we can stop processing the array
            }
        });
        // Outside of the loop, only display no success if we didn't find any matches.
        if (!matched) {
            $("#output").text("no success!").show().fadeOut(10000);
        }

    });
});