J'ai eu cette question lors d'une interview et j'ai échoué. J'étais proche de ma réponse mais je n'ai pas terminé le script. La question était: obtenir le texte du paragraphe, en ajouter un et remettre dans le paragraphe chaque seconde la nouvelle valeur. Ma logique était que dans le p, le nombre est une chaîne. Je le convertis en nombre avec parseInt, puis vérifie si n'est pasNaN, alerte pas un nombre, sinon augmente la valeur avec un et le remets dans le p.
Je vous en prie, dites-moi où je me suis trompé.
JS:
$(function() {
setInterval("addOne()", 1000);
});
function addOne() {
var divP = $("div p").text();
parseInt(divP);
if (isNaN(divP)) {
alert("Not a number!");
} else {
divP++;
$("div p").text();
}
}
HTML:
<div>
<p>1</p>
</div>
3 réponses
Vous avez pas mal de problèmes:
- Vous n'affectez le résultat de
parseInt()
à rien - Vous ne fournissez pas le paramètre
radix
àparseInt()
- Vous devez fournir la référence de la fonction
addOne()
àsetInterval()
pour éviter l'utilisation intrinsèque deeval()
- Vous utilisez le getter de
text()
, sans définir la valeur dedivP
Voici un exemple de travail:
$(function() {
setInterval(addOne, 1000);
});
function addOne() {
var divP = parseInt($("div p").text(), 10);
if (isNaN(divP)) {
alert("Not a number!");
} else {
$("div p").text(++divP);
}
}
On pourrait également faire valoir que l'appel d'un alert()
pour afficher les informations d'état de l'interface utilisateur (en particulier dans une fonction appelée chaque seconde) n'est pas une bonne pratique.
Vous pouvez utiliser ceci
$("div p").html();
Au lieu de
$("div p").text();
Désolé, il doit être html au lieu de val car val est pour les éléments d'entrée. Merci
Vous pouvez trouver la réponse ici.
HTML
<div>
<button id="btnClickStart" >
Start Increment
</button>
<button id="btnClickStop">
Stop Increment
</button>
<p id="pId">
I am testing this script if it will work the 1st time.
</p>
</div>
JAVASCRIPT
$('#btnClickStart').click(function() {
startIncrement();
});
$('#btnClickStop').click(function() {
stopIncrement();
});
var myInterval ;
function startIncrement(){
myInterval = setInterval(function(){ addOne(); }, 1000);
}
function stopIncrement() {
clearInterval(myInterval);
}
var _array = [];
function addOne() {
var divP = document.getElementById('pId').innerHTML;
var _array = [];
for (var i = 0, len = divP.length; i < len; i++) {
parseInt(divP[i]);
if (isNaN(divP[i])) {
//alert("Not a number!");
} else{
_array.push(divP[i]);
}
}
for (var j = 0, len = _array.length; j < len; j++) {
_str =parseInt( _array[j]);
if(!isNaN(_str) ){
divPLast= divP.replace(_str, parseInt(_str)+1);
}
}
document.getElementById('pId').innerHTML = divPLast;
}
Questions connexes
De nouvelles questions
javascript
Pour des questions concernant la programmation dans ECMAScript (JavaScript / JS) et ses divers dialectes / implémentations (hors ActionScript). Veuillez inclure toutes les balises pertinentes dans votre question; par exemple, [node.js], [jquery], [json], etc.