2010-10-04 2 views
0

Я пытаюсь запустить этот Javascript в своем приложении.проверка на ввод целого числа при нажатии кнопки

function validateQuantity(field) 
{ 
    var value = field.value; //get characters 
    //check that all characters are digits, ., -, or "" 
    for(var i=0; i < field.value.length; ++i) 
    { 
     var new_key = value.charAt(i); //cycle through characters 
     if(((new_key <= "0") || (new_key > "9")) && 
      !(new_key == "")) 
     { 
      alert("Please enter number and greater than 0 only"); 
      return false; 
      break; 
     } 
     return true; 
    } 
} 

И у меня есть кнопка ввода, как показано ниже

<input class="buttonToLink" type="submit" value="Update" 
     onclick="return validateQuantity(document.getElementById('quantity'))"/> 

Приведенный выше код успешно проверяет ввод всех алфавита, таких как «ABC» или алфавит и цифровой такой как «abcd123» как ложь.

Однако, когда я помещаю числовые символы первым, наряду с алфавитом, таким как «123abc», он терпит неудачу - он не отображает предупреждение.

Что я сделал с кодом, и как его можно исправить?

+0

Во всяком случае, это правильный код ?, потому что он ведет себя очень странно, как будто это не удается, и она работает случайным образом? – eds

+0

По-видимому, он все еще не работает, никто не знает никого? – eds

+0

Если вы переместите 'return true' вне цикла (как последний оператор в функции), это, вероятно, сработает. –

ответ

2
function validateQuantity(field) { 
    if (!/^\d+$/.test(field.value)) { // is an integer 
     alert("Please enter number and greater than 0 only"); 
     return false; 
    } 

    return true; 
} 

Причина ваш код не работает, потому что вы имеете возвращенную истинное утверждение внутри цикла. Как только он увидит действительное целое число, он вернет true и выйдет из функции, игнорируя все, что приходит после него. Разрешаем такие строки, как «123abc».

Это, вероятно, что вы хотели:

function validateQuantity(field) 
{ 
    var value = field.value; //get characters 
    //check that all characters are digits, ., -, or "" 
    for(var i=0; i < field.value.length; ++i) 
    { 
     var new_key = value.charAt(i); //cycle through characters 
     if(((new_key <= "0") || (new_key > "9")) && 
      !(new_key == "")) 
     { 
      alert("Please enter number and greater than 0 only"); 
      return false; 
      break; 
     } 
    } 

    return true; 
} 
+0

Этот код работает очень хорошо, спасибо большое, я мог бы изучить javascript после того, как закончу это приложение. – eds

+0

Понятно, что это так важно, спасибо в любом случае. – eds

+0

'!/^ \ D + $ /.' Трудно читать => трудно поддерживать. Чтобы улучшить качество кода, используйте 'parseInt', как это сделал Рюэль. – PiTheNumber

2
if (parseInt(new_Key) == new_Key) { 
    //valid 
} else { // it will return NaN 
    //invalid 
} 
1

Попробуйте разобрать значение как целое число и сравнить его с исходным значением.

var isAllNumbers = (parseInt(field.value) == field.value); 

Возможно, используйте селектор jQuery и используйте регулярное выражение для проверки числа.

var isAllNumbers = $("#quantity").val().match(/\d+$/); 
Смежные вопросы