2009-06-19 31 views
23

Mon but est de changer l'attribut "onclick" d'un lien. Je peux le faire avec succès, mais le lien qui en résulte ne fonctionne pas dans ie8. Cela fonctionne dans ff3. Par exemple, cela fonctionne dans firefox3, mais pas ie8. Pourquoi???Comment définir l'attribut OnClick avec la valeur contenant la fonction dans ie8?

<p><a id="bar" href="#" onclick="temp()">click me</a></p> 

    <script> 

    doit = function(){ 
     alert('hello world!'); 
    } 
    foo = document.getElementById("bar"); 
    foo.setAttribute("onclick","javascript:doit();"); 

    </script> 
+3

Quelle est la ligne "javascript: alert ('bonjour');" tout sur? – Hugoware

+0

Quelle est l'idée de ne pas définir l'attribut "type" de la balise script et d'utiliser javascript comme une déclaration de classe ou quelque chose comme ça? – backslash17

+0

laissez-moi corriger cela ... – edt

Répondre

50

Vous n'avez pas besoin d'utiliser setAttribute pour cela - Ce code fonctionne (IE8 aussi)

<div id="something" >Hello</div> 
<script type="text/javascript" > 
    (function() { 
     document.getElementById("something").onclick = function() { 
      alert('hello'); 
     }; 
    })(); 
</script> 
+2

pourquoi mettre cela dans une fermeture? aucune raison pour cela que je puisse voir. –

+0

Pourquoi écrire une fonction séparée pour l'alerte ('hello world')? :) - Cela dépend de ce que vous faites, une fermeture serait mieux OMI si vous ne prévoyez pas de l'appeler à partir d'autres endroits. – Hugoware

+5

dans ce cas, pas besoin de la fonction ou la fermeture. juste document.getElementById ("quelque chose"). onclick = function() {alert ('bonjour'); } –

7

votre meilleur pari est d'utiliser un framework javascript comme jquery ou prototype, mais, à défaut, vous devez utiliser:

if (foo.addEventListener) 
    foo.addEventListener('click',doit,false); //everything else  
else if (foo.attachEvent) 
    foo.attachEvent('onclick',doit); //IE only 

modifier:

aussi, votre fonction est un peu de. il devrait être

var doit = function(){ 
    alert('hello world!'); 
} 
+0

Cela fonctionne, mais j'essaye de surcharger un événement onclick où l'attribut onclick et la valeur sont ajoutés à la balise d'ancrage. Je n'ai pas accès à la modification de l'étiquette d'ancrage, donc je dois le faire avec JavaScirpt. – edt

+1

addEventListener et attachEvent sont de bien meilleurs moyens d'ajouter des événements aux éléments DOM (y compris les balises d'ancrage). ce sont des méthodes discrètes pour ajouter un nombre arbitraire d'événements aux éléments, la propriété onclick, en revanche, n'autorise qu'un seul événement et est beaucoup plus sujet aux erreurs (par exemple d'autres scripts changeant la propriété) –

5

Vous pouvez également définir onclick d'appeler votre fonction comme ceci:

foo.onclick = function() { callYourJSFunction(arg1, arg2); }; 

De cette façon, vous pouvez également passer des arguments. .....

1

Vous pouvez également utiliser:

element.addEventListener("click", function(){ 
    // call execute function here... 
}, false);