2010-09-05 4 views
5

Ho creato un modulo in cui l'utente immette i valori per la larghezza e l'altezza desiderati per la finestra a comparsa. Sto usando window.open per quello.Controllare se una variabile è un numero intero in javascript

Quindi penso di aver bisogno di controllare se i valori per larghezza e altezza sono interi. Ho una funzione che controlla che una variabile è un numero intero che rappresenta ...

function isInteger(possibleInteger) { 
    return !isNaN(parseInt(possibleInteger)); 
} 

ma non so come chiamare questa funzione per la funzione di larghezza e l'altezza per controllare se l'utente immesso un numero intero. Qualcuno può aiutare?

risposta

1
var isWidthAnInteger = isInteger(document.getElementById('width').value); 
var isHeightAnInteger = isInteger(document.getElementById('height').value); 
if (isWidthAnInteger && isHeightAnInteger) { 
    // TODO: window.open 
} 

in cui sono disponibili le seguenti caselle di testo:

Width: <input type="text" id="width" name="width" /> 
Height: <input type="text" id="height" name="height" /> 
+0

ok grazie divertenti! Sai se potrei fare quello che hai fatto, ma fare le dichiarazioni if ​​e else perché voglio anche controllare se è un int e se non è che voglio inviare un messaggio di errore all'utente. Grazie per il tuo aiuto scusa nuovo per javascript. – Sam

+0

oh Sto controllando se la larghezza e l'altezza è int in una funzione e il mio window.open è un'altra funzione chiamata di caricamento della pagina sarà questo effetto se (isWidthAnInteger && isHeightAnInteger) {// TODO : window.open } ??? – Sam

+1

aggiungi un'altra condizione come questa dopo il se 'else {alert (" Inserisci valori interi per larghezza e altezza ")}' –

6

Questa è una risposta alla domanda di cui l'argomento, non quello effettivo nel corpo del testo :).

Il seguente metodo è più preciso nel determinare se la stringa è un numero intero reale.

function isInteger(possibleInteger) { 
    return /^[\d]+$/.test(possibleInteger)​; 
} 

Il metodo corrente convalida "7.5" ad esempio.

MODIFICA: in base al commento di machineghost, ho corretto la funzione per gestire correttamente gli array. La nuova funzione è la seguente:

function isInteger(possibleInteger) { 
     return Object.prototype.toString.call(possibleInteger) !== "[object Array]" && /^[\d]+$/.test(possibleInteger); 
} 
+0

'/^ [\ d] + $ /. test ([1]) 'restituisce true, e' [1] 'è sicuramente un array, non un intero – machineghost

+1

Sì, hai ragione. Ho modificato la mia risposta. Grazie. – Zafer

4

Una risposta alternativa se ti preoccupi delle prestazioni.

var isInteger1 = function(a) { 
    return ((typeof a !== 'number') || (a % 1 !== 0)) ? false : true; 
}; 

i risultati dei test di carico rispetto alla risposta di Zafer in Chrome:

undefined => 4ms vs 151ms 
1 => 10ms vs 390ms 
1.1 => 61ms vs 250ms 
'1' => 8ms vs 334ms 
[1] => 9ms vs 210ms 
{foo: 'bar'} => 8ms vs 478ms 

Guardate voi stessi: jsfiddle