Я столкнулся с проблемой в моем сценарии проверки для проверки австралийских почтовых индексов.
Кажется, он не увеличивается с помощью многомерного массива, который содержит значения почтового индекса.
Вот функция:
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 () выполняет итерацию по первому массиву правильно, но я не уверен, как получить значения из массива второго уровня.
Edit:
ОК, так было поздно ночью, и я слепой.
Коджиро имеет большую часть ответа ниже, и друг здесь также указал на это: я заканчиваю итерацию после первого прогона.
Я переместил цикл if 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
}
}
}
Поскольку я здесь новичок (долгое время слушатель, впервые звонящий), я не могу ответить на свой вопрос, но на самом деле это все.
Вот HTML и вызывающая функция для @nnnnnn и всех, кто хочет посмотреть:
Пользователь выбирает свое состояние из выбора
<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