Votre code fonctionne très bien en supposant qu'il est à portée globale, sauf que vous ne pouvez pas utiliser document.write
après la page est chargée. Donc:
function MyClass()
{
this.instanceData = "Display Me";
this.DisplayData = function()
{
alert(this.instanceData); // <=== only change here
}
}
var classInstance = new MyClass();
... fonctionne bien avec votre attribut onclick
. Live example | source
document.write
est principalement pour l'utilisation pendant le chargement de la page. Si vous l'appelez après le chargement de la page, cela implique un document.open
qui efface le document en cours et le remplace par avec le contenu que vous écrivez. Si vous souhaitez ajouter à la page après le chargement de la page, utilisez createElement
et appendChild
, définissant le contenu de l'élément via innerHTML
. Par exemple:
var p = document.createElement('p');
p.innerHTML = "Hi there";
document.body.appendChild(p);
... ajoute un paragraphe contenant "Hi there" à la page.
Cependant, je vous invite à ne pas utiliser onclick
attributs et tels, notamment parce qu'ils ont besoin d'accéder à des variables et des fonctions globales, et je plaide pour éviter d'avoir des variables globales et fonctions dans la mesure où vous pouvez (et vous pouvez presque évitez-les complètement). Au lieu de cela, utilisez les méthodes modernes de raccordement des gestionnaires d'événements: addEventListener
et (pour prendre en charge IE8 et versions antérieures) attachEvent
.
donc changer votre exemple pour que cela ne crée pas de GLOBALS:
(function() {
function MyClass()
{
this.instanceData = "Display Me";
this.DisplayData = function()
{
alert(this.instanceData);
}
}
var classInstance = new MyClass();
// ...and hook it up
var button = document.getElementById("theButton");
if (button.addEventListener) {
button.addEventListener('click', function() {
classInstance.DisplayData();
}, false);
}
else if (button.attachEvent) {
button.attachEvent('onclick', function() {
classInstance.DisplayData();
});
}
else {
// Very old browser, complain
}
})();
(. Notez que le nom de l'événement "clic" avec addEventListener
, "onclick" avec attachEvent
)
Ce prend le bouton ressemble à ceci:
<button id="theButton">Click Me!</button>
... et que votre code est exécuté après que le bouton a déjà été mis sur la page (par exemple, votre script est at the bottom of the page ou s'exécute en réponse à un événement).
Maintenant, il est difficile de vérifier s'il faut utiliser addEventListener
ou attachEvent
à chaque fois. En outre, vous pouvez ne pas vouloir tous les éléments avec lesquels vous devez travailler pour avoir un id
. C'est là que l'utilisation d'une bonne bibliothèque JavaScript comme jQuery, Prototype, YUI, Closure, ou any of several others est utile. Ils adoucissent les événements (et beaucoup d'autres idiosyncrasies) pour vous, et fournissent des fonctionnalités utiles pour localiser les éléments autrement que par id
(dans la plupart des cas, prenant en charge presque tous les sélecteurs CSS, même sur les anciens navigateurs qui n'ont pas querySelector
/querySelectorAll
construit en
Si vous voulez le faire correctement et éviter de causer un gâchis, ne pas utiliser les gestionnaires d'événements en ligne ('onclick' et amis). Ils n'appartiennent tout simplement pas à votre code HTML. En savoir plus sur 'addEventListener()' et tout votre code deviendra beaucoup plus propre et gérable. – kapa