我在验证脚本中遇到问题,检查澳大利亚邮政编码。 它似乎没有通过包含邮政编码值的多维数组递增。
这是功能:
function validateAustralia(postcode, ranges) {
for (var i = 0; i < ranges.length; i++) {
console.log(i);
//returns only 0, when it should return 0, 1, 2.
console.log("postcode: " + postcode + " " + "ranges: " + ranges);
//returns postcode: 2000 ranges: 200,299,2600,2618,2900,2920
console.log("ranges - low: " + ranges[2][0] + " " + "ranges - high: " + ranges[2][1]);
//returns ranges - low: 2900 ranges - high: 2920
if (postcode >= ranges[i][0] && (postcode <= ranges[i][1])) {
valid = true;
//confirmation();
//break;
} else {
inelegible();
return false;
}
}
}
例如新南威尔士州
ranges = [ [1000, 2599], [2619, 2898], [2921, 2999] ];
它只返回1000和2599 - 即范围[0] [0]和范围[0] [1] 因此,输入Dubbo(位于新南威尔士州)的邮政编码的人被裁定无效,因为其邮政编码 - 2830 - 不在1000和2599之间。
jQuery的$ .each()正确迭代第一个数组,但我不知道如何从第二级数组中获取值。
编辑: 好的,所以这是一个深夜,我是盲目的。 kojiro的答案大部分都在下面,而且这里的一位朋友也指出:我在第一次运行后终止了迭代。 我移动了,如果else循环迭代,只测试邮政编码是否在范围内。如果是,它是有效的。 然后,如果valid = true,我调用确认函数,其他一切都很好:
function validateAustralia(postcode, ranges) {
for (var i = 0; i < ranges.length; i++) {
console.log(i);
// returns 0, 1, 2 ...
console.log("postcode: " + postcode + " " + "ranges: " + ranges);
// for Dubbo (2830), for example, returns postcode: 2830 ranges: 1000,2599,2619,2898,2921,2999
console.log("ranges - low: " + ranges[i][0] + " " + "ranges - high: " + ranges[i][1]);
// returns ranges - low: 1000 ranges - high: 2599,
// ranges - low: 2619 ranges - high: 2898, ...
if (postcode >= ranges[i][0] && (postcode <= ranges[i][1])) {
valid = true;
// alert("valid =" + valid);
}
if (valid === true) {
confirmation();
// all good
} else {
inelegible();
// Sorry, mate
}
}
}
因为我是新来的,(长时间听众,第一次打电话)我无法回答我自己的问题,但基本上就是这样。
这是@nnnnnn的HTML和调用函数以及任何想要查看的人: 用户从选择
中选择状态<select id="states" name="states">
<option selected="" value="">Please choose ...</option>
<optgroup label="Australia" id="australia">
<option value="act">Australian Capital Territory </option>
<option value="nsw">New South Wales </option>
<!-- ...and so on for the rest of the states -->
并将其邮政编码输入文本框
<input id="postcode" name="postcode" type="text" maxlength="4" />
我得到了
postcode = $('#postcode').val();
并检查一系列邮政编码值
function checkAustralia(state, postcode, ranges) {
// has to be in the range of values
switch (state) {
//Australian states
//match the whole postcode
//postcodes with a leading '0' are validated as whole numbers without the '0'
case 'act':
ranges = [ [200, 299], [2600, 2618], [2900, 2920] ];
validateAustralia(postcode, ranges);
break;
case 'nsw':
ranges = [ [1000, 2599], [2619, 2898], [2921, 2999] ];
validateAustralia(postcode, ranges);
break;
// ...and so on for the rest of the states
答案 0 :(得分:1)
检查第一个范围后,您的函数将返回false
。如果值在范围内,则反转该逻辑:return true
,但仅当循环完全耗尽时才返回false。
此外,您的代码并不总是显式返回值。这显然不是一个问题,但它可能与这里的混乱有关。