2009-06-03 7 views
1

J'essaie de créer une fonction javascript générique qui changerait les attributs des événements.Javascript getElementById()

La façon dont il fonctionnerait est

function fooFunction(sourceElement) 
{  
    var newName = sourceElement+'Span';  
    var newElement = document.getElementById(newName); 
    //Important line 
    newElement.property = "enter properties here"; 
} 

et je l'appellerais avec quelque chose comme

<img src="foo.gif" id="foo" name="foo" onmouseover="fooFunction(this.id);"/> 
<span id="fooSpan" name="fooSpan">some text here</span> 

Donc, en théorie, en vol stationnaire l'image, il faut changer ce que je dois propery changer sur l'objet fooSpan. Cela fonctionne dans Opera, mais sur IE il renvoie un objet nul.

Des idées?

L'idée serait que j'aurais plusieurs images qui déclencheraient automatiquement le changement de propriété sur l'étendue de texte associée (typiquement le style css).

+0

Vous devez entrer à nouveau le code que vous avez inséré car il a été perdu car vous ne l'avez pas marqué comme du code. –

+0

En fait j'essaye de changer l'attribut de style. Mais l'objet est nul pour commencer.Merci pour la réponse rapide. – mtranda

+2

Pourriez-vous publier le code que vous utilisez? Au lieu de 'newElement.property'. –

Répondre

1

Etes-vous sûr d'obtenir l'ID correctement dans IE? Peut-être que l'ID transmis est nul dans IE (peut-être que this.id ne fonctionne pas?).

Essayez d'appeler comme ceci:

<img src="foo.gif" id="foo" name="foo" onmouseover="fooFunction('foo');"/> 

et voir si cela aide. Je ne vois aucune raison pour laquelle getElementById() échouerait, donc la seule chose à laquelle je peux penser est que c'est un problème d'identification.

0

Peut être cette ligne ne fonctionnera pas dans IE. "newElement.property" Je ne connais pas la raison exacte.

Vous pouvez utiliser cette place de cette ligne

newElement.setAttribute (propriété, "saisir des propriétés ici");

En attendant, j'essaie de trouver la raison derrière l'erreur.

+0

il n'y a rien qui s'appelle .property Il l'utilise simplement comme une chaîne de substitution aléatoire que de mettre le code réel qui peut être .style ou .width ou quelque chose. Mais –

0

Ma suggestion serait de faire quelque chose comme ça.

function fooFunction(sourceElement,property,propertyValue) {  
    var newElement = document.getElementById(sourceElement); 
    newElement.setAttribute(property,propertyValue); 
}; 

Et votre HTML ressemblerait à ceci:

<img src="foo.gif" id="foo" name="foo" 
      onmouseover="fooFunction('fooSpan','class','mouseover_span');"/> 
<span id="fooSpan" name="fooSpan">some text here</span> 
+0

qui viole totalement sec. S'il utilise un schéma de nommage (fooSpan, barSpan, etc.), il va falloir taper que à chaque fois. –

+0

Je ne pensais même à ce propos, j'essayais juste de créer une fonction généralisée: il pouvait ajouter une fonction onmouseover et onmouseout qui utilisait fooFunction() comme base, de cette façon vos fonctions onmouseover et onmouseout ne partagent pas le même code. remarquez la faille jusqu'à ce que vous l'ayez indiqué. – trydyingtolive

0

Je FORTEMENT vous invite à envisager d'utiliser la méthode de attr() intégré jQuery qui intègre la fonction que vous voulez parfaitement dans les navigateurs et est incroyablement facile à utiliser.

En utilisant votre exemple, si vous vouliez changer la propriété « src » pour « foo », vous pouvez le faire en une seule ligne de code:

$("#foo").attr("src","images/whatever.png"); 

De même, si vous vouliez changer le code html DANS « fooSpan », tout ce que vous auriez à faire est:

$("#fooSpan").html("something else"); 

vous pouvez même lier ces à des événements qui vont vous donner beaucoup plus de flexibilité que la propriété onmouseover:

$(document).ready(function(){ 
$("#foo").mouseover(function(){ 
    $("#fooSpan").html("something else"); 
    $("#foo").attr("src","images/whatever.png"); 
    }); 
});