7
votes

ceci.name retourne non défini dans JavaScript

J'essaie de créer à distance un onclick pour chaque

(Pour enregistrer l'heure de taper).

Voici la fenêtre .Onload ( ) fonction: xxx

nom de chaque

est "flyingsheep" - cette valeur a été défini par
.

Quand je clique sur le

, "jeu" iframe < / Code> me prend à la page Web "/ jeux / indéfinis" .

3 commentaires

Est-ce que le pour modifie vraiment la signification de ceci ?


@bzlm - Non, et au moment où les fonctions anonymes sont appelées, pour est parti depuis longtemps.


Fyi, élément.name n'est pas défini pour div , voir cette référence .


3 Réponses :


1
votes

Il est difficile de dire ce que le problème est sûr, car je n'ai pas accès à votre cas de test, je ne peux donc voir aucune erreur ni essayer de le modifier, mais certains problèmes sont les suivants: < / p>

n'est pas traditionnel, il n'est pas valide. Il y a Non Nom Attribut pour les éléments div .

Je ne serais pas surpris si le JS lance une erreur lorsque vous essayez de définir divel.length.onmouseover - N'utilisez pas pour (foo in bar) Sur le tableau comme des objets, utilisez un compteur normal.

Ma meilleure théorie est que vous avez plus d'éléments div (indic> alors ceux que vous vous souciez, et c'est un clic sur l'un de ceux-ci (un sans attribut de nom), éventuellement contenant celui que vous avez visent à cliquer sur) qui tire la fonction JS.


5 commentaires

Comme mentionné, cela est difficile à déboguer sans un essai complet.


J'ai dit que dans mon poteau :). Quoi qu'il en soit, la réponse ci-dessous a fonctionné. Je ne savais pas que Div n'a pas de nom = "" Valeur - Comment est-ce stupide?


Vous n'avez pas mentionné qu'il était difficile pour les gens de résoudre votre problème sans votre HTML du tout. Je suis très surpris que ce qui précède (indice: Stackoverflow vous permet de régler les réponses de différentes manières «ci-dessus» et «ci-dessous» n'a pas fonctionné. C'est juste une syntaxe différente pour obtenir la même chose. Et ce n'est pas du tout stupide, nous avons classe un identifiant générique non unique, nous n'en avons pas besoin d'un autre, laissez le nom des commandes de formulaire.


Les divs ont déjà des cours. Sont des contrôles de forme la seule chose qui ont des attributs de noms?


L'attribut de classe prend une place séparée Liste de classes, donc "avoir une classe déjà" n'est pas une raison pour ne pas en avoir un autre. Les cadres ont aussi des noms, d'attacher à la cible (et aux «cadres d'Ewugh»). Les ancres les ont, mais obsolètes dans XHTML 1.1. Il y a quelques autres, l'attribut a toutes sortes de significations différentes selon son apparition.



13
votes

Cela fonctionnera. Le problème est corrigé.

Il suffit d'utiliser: ceci.atributes ["nom"]. Valeur code> p>

window.onload = function() { 
        divel = document.getElementsByTagName('div');
        for(var el in divel){
        window.alert(divel[el].name);
            divel[el].onmouseover = function(){ this.style.textDecoration = "underline"; };
            divel[el].onmouseout = function(){ this.style.textDecoration = "none"; };
            divel[el].onclick = function(){document.getElementById('game').src = this.attributes["name"].value;} 
        }
}


1 commentaires

Testé dans Firefox 4.0 et IE 8.0



1
votes

dans jQuery Vous pouvez plutôt utiliser:

$(this).attr("name");


1 commentaires

Il ne vaut pas la peine (performance-wise) charger une bibliothèque massive juste pour l'utilisation d'une fonction