我尝试构建一个表单,检查输入的邮政编码是否与预定义数组中的邮政编码匹配。我不使用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;
}
});
});
答案 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
}
答案 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);
}
});
});