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>
1
dragon 8 mars 2016 à 13:03

3 réponses

Meilleure réponse

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 de eval()
  • Vous utilisez le getter de text(), sans définir la valeur de divP

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);
    }
}

Exemple de violon

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.

5
Rory McCrossan 8 mars 2016 à 10:16

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

1
CodeConstruct 8 mars 2016 à 10:51

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; 
 }
0
KPrasad 9 mars 2016 à 04:31