2010-05-09 8 views
0

J'essaie d'utiliser .push pour placer des éléments dans un tableau javascript. J'ai créé un morceau de code simplifié. Lorsque je clique sur le bouton avec l'ID clickButton, je m'attends à recevoir une série d'alertes avec des chiffres, mais je n'ai rien.javascript .push() ne semble pas fonctionner

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Sempedia | Making computers think about data the way we do</title> 
<link href="css/styles.css" rel="stylesheet" type="text/css" /> 
<script type="text/javascript" src="js/jquery.js"></script> 
<script> 
    $(document).ready(function() { 
    var myArray = new Array(); //declare the array 

    for(var i=0;i<=10;i++){ // create a loop 
     myArray.push(i); // add an item to array 
    } 

    $("#clickButton").live('click',function() { //register the button being clicked 
    for(var j=0;j<=10;j++){ //for loop 
     alert(myArray[j]); //alert one item in the array 
     } 
    }); 

}); 
</script> 
</head> 
<body> 
<input type="button" value="click me" id="clickButton" /> 
</body> 
</html> 
+1

le code semble bien, assurez-vous que jQuery est effectivement inclus ... – CMS

+1

L'une des premières étapes que vous devez toujours faire lorsque vous avez une programmation de problème est de vérifier d'erreur messages. – goat

+0

Au lieu de 'new Array()' vous pouvez utiliser '[]' pour créer un tableau vide. – gnarf

Répondre

3

Works pour moi. Vous avez probablement une erreur ailleurs sur la page.

+1

Comme CMS a fait remarquer que c'était un problème avec jquery n'étant pas inclus. – Ankur

-1

Déclarez myArray en dehors de la portée de la fonction document.ready. Par exemple:

<script> 
    var myArray = new Array(); //declare the array 
    $(document).ready(function() { 

    for(var i=0;i<=10;i++){ // create a loop 
     myArray.push(i); // add an item to array 
    } 

    $("#clickButton").live('click',function() { //register the button being clicked 
    for(var j=0;j<=10;j++){ //for loop 
     alert(myArray[j]); //alert one item in the array 
     } 
    }); 

}); 
</script> 
+2

Cela ne fera pas de différence. – SLaks

+0

Comme je suis sûr que cela est techniquement correct, myArray sûr que diable ne sera pas utile ailleurs que sur document prêt en utilisant le code des affiches. Je ne sais pas si la réponse valait la peine d'être downvote. – BradBrening

+1

Vous avez tort; l'identifiant myArray est dans la portée de la fonction de rappel. – Garrett

0

Utiliser HTML valide, voir http://validator.w3.org/

Ne pas inclure des commentaires inutiles tels que "//for loop"; Si quelqu'un ne reconnaît pas une boucle for, ce commentaire ne va certainement pas aider beaucoup. Aucun de ces commentaires ne sera utile à personne.

Il est important de simplifier et de supprimer tout ce qui n'est pas lié au problème, tel que le tag link. Cela aidera à clarifier ce que fait le code.

Pendant que vous y êtes, supprimez jQuery et apprenez à comprendre ce que vous faites.

L'utilisation de jQuery a considérablement augmenté au cours des deux dernières années. Il est maintenant employé pour toutes sortes de choses; des choses qui sont non seulement triviales à accomplir sans jQuery, mais qui sont en réalité plus faciles à accomplir sans jQuery. Cela s'accompagne souvent de plaintes selon lesquelles le code ne fait pas ce que l'on veut, alors que tout ce qui était nécessaire pour savoir pourquoi était une compréhension très élémentaire des technologies pertinentes.

Maintenant à votre problème. Vous voulez que cela fonctionne et ce n'est pas le cas [1].

Le problème que vous devez résoudre est de déclencher le gestionnaire d'événements. Si une stratégie de délégation est souhaitée, comme celle que vous avez essayée avec jQuery live, cela peut être accompli en ajoutant un rappel de clic sur le document qui inspecte la cible et la gère, en conséquence.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" 
     "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
<title>Me | Trying to make you think</title> 
<script type="text/javascript"> 
(function(){ 
    var myArray = [1,2,3]; 

    document.onclick = function(ev) { 
     var target = getTarget(ev); 
     if (target && target.id == "clickButton") { 
      handleClickButtonClicked(); 
     } 
    }; 

    function handleClickButtonClicked() { 
     alert(myArray); 
    } 

    function getTarget(ev) { 
     ev = ev || window.event; 
     return ev ? ev.target || ev.srcElement : null; 
    } 
})(); 
</script> 
</head> 
<body> 
<p><input type="button" value="click me" id="clickButton"></p> 
</body> 
</html> 

Cependant, compte tenu de votre niveau de compétence, je conseillerais d'y aller encore plus simple et le simple ajout d'un gestionnaire d'événements onclick du bouton directement.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" 
     "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
<title>Me | Trying to make you think</title> 
<script type="text/javascript"> 
    var myArray = [1,2,3]; 
</script> 
</head> 
<body> 
<p><input type="button" value="click me" onclick="alert(myArray)" id="clickButton"></p> 
</body> 
</html> 

[1] http://jibbering.com/faq/notes/posting/#ps1DontWork

Questions connexes