JavaScript в IE7, проверка числа (целое число) не работает - PullRequest
0 голосов
/ 13 января 2012
function isInteger(char) {
    return (char.toString().search(/^-?[0-9]+$/) == 0 )
}
function validateQuan() {
var minExist = "false";
    for (i=0; i<3; i++) {
        var j = document.getElementById("ProductQuantity_"+i).value; 
        if (isInteger(j) && j > 0) {minExist = "true";alert("oi");} 
    }
    if (minExist == "true") {$("#pvs_form").submit();} else {alert("Please enter at least one valid quantity");}
}

Выше мой код, он работает на FF 3.6 и IE8, но не с IE7. В IE7 «if (isInteger(j) && j > 0)» не может привести к «истине». Даже я удаляю "j > 0" и использую "[1-9]" для регулярных выражений.

Есть ли лучшее решение?

edit : извините, регулярное выражение неверно, любое число > 9 тоже "true".

edit : большое извините всех, я просто обнаружил, что главная проблема на самом деле, потому что я получил другую форму на той же странице с тем же идентификатором "ProductQuantity_" + i, и, вероятно, он повернет IE7 смотреть только на первый элемент с идентификатором, найденным на странице Может быть, мой оригинальный код работал на самом деле, но спасибо, чтобы напомнить мне, что регулярное выражение не так, как ожидалось, и получить лучший код. Спасибо и еще раз извините.

Ответы [ 3 ]

1 голос
/ 13 января 2012
   var isInteger = function( str ) { 
      return  (str|0) == str;
    };

Побитовое ИЛИ на 0 гарантирует, что строка или число с плавающей запятой заменятся на целое число

isInteger("3.4") // false
isInteger("abc") // false => "abc"|0 = 0
isInteger("3") // true

А теперь:

function validateQuan() {
    var minExist = false ;
    for (var i = 0; i < 3; i++ ){
        var j = document.getElementById("ProductQuantity_"+i).value; 
        if ( isInteger( j ) && j > 0 ) {
            minExist = true; 
            alert("oi");
            break; // goal achieved, break loop
        } 
    }
    if ( minExist ) {
        $("#pvs_form").submit();
    } else {
        alert("Please enter at least one valid quantity");
    }
}
1 голос
/ 13 января 2012

Попробуйте:

function validateQuan() {
    var minExist = "false";
    for( i=0; i<3; i++) {
        var j = parseInt(document.getElementById("ProductQuantity_"+i).value);
        if( !isNaN(j) && j > 0) {minExist = "true"; alert("oi");}
    }
    if( minExist == "true") {...} else {...}
}
0 голосов
/ 13 января 2012

Попробуйте:

function isInteger(char) {
    return Number(char) == parseInt(char);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...