Appel en instance de classe de la méthode onclick javascript
J'ai un fichier javascript avec des classes qui contiennent des fonctions de méthode. Je me demandais comment aller sur l'appel d'une méthode d'instance de la classe à partir d'un événement onClick.
function MyClass()
{
this.instanceData = "Display Me";
this.DisplayData = function()
{
document.write(this.instanceData);
}
}
var classInstance = new MyClass();
Comment pourrais-je appeler le DisplayData fonction classInstance à partir d'un événement onClick. Par exemple:
<button onClick="classInstance.DisplayData()">Click Me!</button>
Qui ne fonctionne pas, mais permet-moi de clarifier ce que je cherche à faire. Des suggestions?
- Si vous voulez bien faire les choses, et éviter de causer un désordre, ne pas utiliser inline gestionnaires d'événements (
onclick
et amis). Ils n'ont tout simplement pas leur place dans votre code HTML. ApprendreaddEventListener()
et tout votre code sera beaucoup plus propre et facile à gérer.
Vous devez vous connecter pour publier un commentaire.
http://jsfiddle.net/EyMCQ/1/
Comme vous le remarquez, cela ne fonctionne pas, car le var, vous avez déclaré, reste dans le cadre de l'exécution du bloc. Si vous supprimez le var, ça va marcher, parce que
classInstance
est maintenant à portée globale.et de l'appeler comme ceci:
http://jsfiddle.net/EyMCQ/2/
window.classInstance = ...
). 2. Il n'y a absolument aucune raison pourclassInstance.DisplayData.call(classInstance)
; c'est exactement le même queclassInstance.DisplayData()
. 3. Il ne traite pas le fait que l'OP du code utilisedocument.write
, qui ne fonctionne pas (la façon dont ils le souhaitent) après le chargement de la page.Votre code fonctionne très bien en supposant que c'est à la portée globale, sauf que vous ne pouvez pas utiliser
document.write
après le chargement de la page. Donc:...fonctionne très bien avec votre
onclick
attribut. Live exemple | sourcedocument.write
est principalement pour une utilisation pendant le chargement de la page. Si vous appelez après chargement de la page, il implique undocument.open
qui efface le document courant et remplace avec le contenu que vous écrivez. Si vous souhaitez ajouter à la page d'après le chargement de la page, utilisezcreateElement
etappendChild
, définir le contenu de l'élément viainnerHTML
. Par exemple:...ajoute un paragraphe contenant "Bonjour" à la page.
Cependant, je vous demande instamment de ne pas utiliser
onclick
attributs et tels, pas moins parce qu'ils nécessitent l'accès aux variables et fonctions globales, et je plaide pour éviter d'avoir des variables globales et des fonctions dans la mesure où vous pouvez (et vous pouvez presque complètement les éviter). Au lieu de cela, utiliser des méthodes modernes de raccordement des gestionnaires d'événement:addEventListener
et (à l'appui de IE8 et plus tôt)attachEvent
.Ainsi changer votre exemple, afin de ne pas créer tout globals:
(Notez que le nom de l'événement est "click" avec
addEventListener
, "onclick" avecattachEvent
.)Qui suppose que le bouton ressemble à ceci:
...et que votre code s'exécute après que le bouton a été déjà mis sur la page (par exemple, votre script est au bas de la page ou qui s'exécute en réponse à un événement).
Maintenant, c'est une douleur pour vérifier si l'utilisation de
addEventListener
ouattachEvent
à chaque fois. En outre, vous ne voulez pas que chaque élément que vous devez travailler avec des d'avoir unid
. C'est là que l'aide d'une bonne bibliothèque JavaScript comme jQuery, Prototype, YUI, Fermeture, ou plusieurs autres est utile. Ils s'atténuent au cours de la manifestation des trucs (et de nombreux autres particularités) pour vous, et de fournir des fonctionnalités utiles pour la localisation des éléments d'une autre façon que parid
(dans de nombreux cas, le soutien près de tous les CSS-les sélecteurs de style, même sur les vieux navigateurs qui n'ont pasquerySelector
/querySelectorAll
construit dans.Toutes les réponses ci-dessus semblent compliquer à l'excès la situation un peu.
J'utilise simplement ceci:
Et voici le bouton:
Et ici, c'est un violon qui illustre cela:
Violon