2010-09-05 8 views
5

J'ai créé un formulaire dans lequel l'utilisateur saisit les valeurs de largeur et de hauteur souhaitées pour la fenêtre contextuelle. J'utilise window.open pour cela.Vérification de la présence d'une variable dans un javascript

Je pense donc que je dois vérifier si les valeurs de largeur et de hauteur sont des nombres entiers. J'ai une fonction qui vérifie qu'une variable est un entier qui est ...

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

mais je ne sais pas comment appeler cette fonction à la fonction de la largeur et la hauteur pour vérifier si l'utilisateur entré un entier. Quelqu'un peut-il aider?

Répondre

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

où vous avez les zones de texte suivantes:

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

ok merci frais! Savez-vous si je pourrais faire ce que vous avez fait mais faites si et sinon des déclarations parce que je veux également vérifier si c'est un int et si ce n'est pas je veux envoyer un message d'erreur à l'utilisateur. Merci pour votre aide désolé nouveau pour javascript. – Sam

+0

oh je suis vérifier si la largeur et la hauteur est int en fonction et mon window.open est une autre fonction appelée chargement de la page sera cet effet si (isWidthAnInteger && isHeightAnInteger) {// TODO : window.open } ??? – Sam

+1

juste ajouter autre condition comme ceci après le si 'else {alert (" Veuillez entrer des valeurs entières pour la largeur et la hauteur ")}' –

6

Ceci est une réponse à la question mentionnée dans le sujet, et non pas celui dans le corps du texte :).

La méthode suivante est plus précise pour déterminer si la chaîne est un entier réel.

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

Votre méthode actuelle valide "7.5" par exemple.

EDIT: Basé sur le commentaire de machineghost, j'ai corrigé la fonction pour gérer correctement les tableaux. La nouvelle fonction est la suivante:

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

'/^ [\ d] + $ /. test ([1]) 'renvoie vrai, et' [1] 'est définitivement un tableau, pas un entier – machineghost

+1

Oui, tu as raison. J'ai édité ma réponse. Merci. – Zafer

4

Une réponse alternative si vous vous souciez des performances.

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

résultats des tests de charge par rapport à la réponse dans Chrome Zafer:

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 

Voyez vous-même: jsfiddle

Questions connexes