2013-05-23 2 views
0

У меня есть код, написанный на javascript, который проверяет введенные числа в поле на основе набора допустимых чисел. Проблема im заключается в том, что даже если я ввожу правильные числа, он возвращает false. Вот мой код:Проблемы с кодом проверки?

window.onload=function() { 

var validNumbers = { 
"2474": 2474, 
"2750": 2750, 
"2753": 2753, 
"2760": 2760, 
"2777": 2777 
}; 
function validate(num) { 
return typeof validNumbers[num] !== "undefined"; 
}; 

var button = document.getElementById("submit"), 
userInput = document.getElementById("post"); 
button.onclick = function(event) { 
alert("Please enter a correct postcode"); 
}; 
} 

<form name="eoiform" form method="POST" action="<?php echo $_SERVER["PHP_SELF"];?>" id="eoi"> 

<input type="text" id="post" name="post"><?php echo $msgp; ?></td> 

<input type="submit" name="submit" id="submit" value="submit"> 

</form> 

Может ли кто-нибудь дать представление о моих ошибках? Или, возможно, лучший способ написать это?

+1

Вы знаете, ваша функция Validate никогда не вызывается? – slinky2000

+0

Он по-прежнему работает на основе нажатия кнопки отправки, поэтому я не думаю, что это нужно назвать? – AJJ

+0

У вас есть блуждающее слово «форма» в вашем теге формы, а также есть бродячий тег в форме – slinky2000

ответ

2

Кажется сложным? просто проанализируйте введенное значение как целое число и проверите его против массива, если это значение существует в массиве, отправьте форму, если не предупредить сообщение и вернуть false.

Вы должны подтвердить наличие на мероприятии отправки, так как есть другие способы отправить форму, а не просто щелкнуть по кнопке (например, попасть в поле ввода).

Поместите скрипт после HTML, и избавиться от этого window.onload в то же время:

<form name="eoiform" form method="POST" action="<?php echo $_SERVER["PHP_SELF"];?>" id="eoi"> 
    <input type="text" id="post" name="post"><?php echo $msgp; ?></td> 
    <input type="submit" name="submit" id="submit" value="submit"> 
</form> 
<script> 
    var form   = document.getElementById('eoi'), 
     validNumbers = [2474, 
         2750, 
         2753, 
         2760, 
         2777 
         ]; 

    form.onsubmit = function() { 
     var userInput = document.getElementById("post"), 
      numb  = parseInt(userInput.value, 10); 

     if (validNumbers.indexOf(numb) == -1) { 
      alert("Please enter a correct postcode"); 
      return false; 
     }else{ 
      return true; 
     } 
    } 
</script> 

FIDDLE

+0

Что все работало отлично и спасибо за дополнительную информацию! – AJJ

+0

@francis - sidenote: здесь используется Array.indexOf, который не поддерживается в более старых версиях IE, но на [MDN] имеется полиполк (https://developer.mozilla.org/en-US/docs/ JavaScript/Reference/Global_Objects/Array/indexOf), если вам нужно поддерживать старые браузеры. – adeneo

+0

Браузер мудрый, все должно быть хорошо, спасибо еще раз. – AJJ

1

Что об этом? учитывая вашу функцию проверки, NEVER get.

var validNumbers = { 
    "2474": 2474, 
    "2750": 2750, 
    "2753": 2753, 
    "2760": 2760, 
    "2777": 2777 
}; 

function validate(num) { 
    return typeof validNumbers[num] !== "undefined"; 
}; 

var button = document.getElementById("submit"), 
    userInput = document.getElementById("post"); 

button.onclick = function(event) { 
    var val = validate(userInput.value) 
    if(!val) { 
     alert("Please enter a correct postcode"); 
     return false; 
    } else { 
     alert("Thanks"); 
     // Run your code here 
     // Form will submit 
    } 
}; 

http://jsfiddle.net/n7SxE/

Смежные вопросы