#javascript
#javascript
Вопрос:
Я новичок в этих вещах. Я пытаюсь написать функцию, которая будет следить за тем, чтобы состояние, введенное пользователем в форме, соответствовало введенному им почтовому индексу. Например, почтовые индексы моего штата (Висконсин, WI) находятся между 53000 и 54999, поэтому я хотел бы убедиться, что если почтовый индекс, введенный в форме, находится между 53000 и 54999, введенным состоянием является WI, если пользователь не предупрежден.Мой html и код приведены ниже: он превращает строковый почтовый индекс в числа, но часть, которая должна сравнивать почтовый индекс и состояние, не работает. Как мне использовать метод test() для сравнения введенного состояния с реальным состоянием, соответствующим почтовому индексу? Спасибо. …………………………………………………………..
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title> Matching state and zip code</title>
<script>
function validate(form) {
var returnValue = true;
var state = form.txtState.value;
var zip = form.txtZipcode.value;
var nzip = parseInt("form.txtZipcode.value");
if (state.length !=2) {
returnValue = false;
alert("The state field is empty. Please enter a state.");
frmRegister.txtState.focus();
}
if ((nzip >= 5300 amp;amp; nzip <=5499) amp;amp; (state !== WI)){
returnValue = false;
alert("The zip code does not match the state. Please check again");
frmRegister.txtState.focus();
}
if (zip.length !==5) {
returnValue = false;
alert("Your zip code should be n 5 digits long. Please enter a real US zip code");
frmRegister.txtZipcode.focus();
}
if (typeof nzip == "string") {
alert('nzip is a string.')
}
if (typeof nzip == "number") {
alert('nzip is a number.')
}
else
return returnValue;
}
</script>
</head>
<body>
<form name ="frmRegister" method="post" action ="register.aspx"
onsubmit="return validate(this);">
<fieldset>
<legend>Register with us</legend>
<div>
<label for ="txtState"> STATE:</label>
<input type="text" name="txtState" id ="txtState" size = "12"/>
</div>
<div>
<label for ="txtZipcode"> ZIP CODE:</label>
<input type="text" name="txtZipcode" id ="txtZipcode" size = "12"/>
</div>
<div>
<input type="submit" value="Send"/>
</div>
</form>
</body>
</html>
Ответ №1:
Выполните эту проверку, сохранив диапазон значений почтового индекса в массиве JSON, например
var states = {WI : {start : 5000,end:6000}, ST : {start: 6001,end: 7000}};
Теперь получите значение состояния, пусть оно будет «state_entered», теперь получите диапазон как
var range = states.state_entered;
Теперь проверка диапазона стала проще
if(zipcode_entered > range.start amp;amp; zipcode_entered < range.end){
alert("That's correct!!!");
}
Таким образом, вы можете обрабатывать любое количество состояний без громоздкости кода.
Комментарии:
1. Спасибо. Я проверю и дам вам знать. Проверка достоверности почтового индекса как такового на самом деле не является моей самой большой проблемой: головная боль заключается в сравнении введенного почтового индекса с состоянием, чтобы убедиться, что они совпадают. Допустим, человек вводит 53704 (почтовый индекс Висконсина (WI)), но выбирает Мичиган (MI) в качестве штата, я хочу, чтобы функция:
2. Я проверю и дам вам знать. Проверка достоверности почтового индекса как такового на самом деле не является моей самой большой проблемой: головная боль заключается в сравнении введенного почтового индекса с состоянием, чтобы убедиться, что они совпадают. Допустим, человек вводит 53704 (почтовый индекс Висконсина (WI)), но выбирает Мичиган (MI) в качестве штата, я хочу, чтобы функция: получить почтовый индекс, проверить, находится ли он между 53000 и 54999, получить две буквы выбранного штата (в данном случае MI), сравнить егов известное состояние с почтовым индексом, и если оно совпадает, форма отправляется, если нет (как в этом случае), продолжается оповещение.