4
votes

Comment accéder à une fonction vue depuis onclick en javascript?

Je construis un composant vue et je souhaite appeler une fonction définie dans les méthodes Vue en appelant l'attribut onClick lors de la modification de innerHTML. Cependant, cela me donne une erreur, "showModal n'est pas défini" comme indiqué ci-dessous.

Voici ma fonction showModal, j'essaie juste de consolider certaines données pour m'assurer que la fonction est appelée:

window.violations=this.violations;


et voici où j'essaye d'appeler cette fonction en js par la fonction onclick:

var inputText = document.getElementById("fileContents");
        var innerHTML = inputText.innerHTML;
 for(var i=0;i<this.violations.length;i++){

          var index=innerHTML.indexOf(this.violations[i]);
          if(index>0) {
            innerHTML = innerHTML.substring(0, index) +"<a href='#' onclick='showModal'>"+ "<span  style=\"background-color: yellow\">" + innerHTML.substring(index, index + this.violations[i].length) + "</span>" + "</a>" + innerHTML.substring(index + this.violations[i].length);

            inputText.innerHTML = innerHTML;
          }

        }

erreur: (index): 1 Uncaught ReferenceError: showModal n'est pas défini à HTMLAnchorElement.onclick ((index): 1)

Est-ce que je l'appelle d'une mauvaise manière?

Merci!

Modifier: strong>

Merci à @Ferrybig - je sais que je suis capable d'appeler la fonction, mais j'ai un autre problème; Je veux passer le mot actuel que je change son html à la fonction comme ceci: onclick = 'myMethod (violations [i])' J'ai essayé de définir le tableau this.violations pour être global comme ceci:

methods: {

      showModal: function() {
            console.log("function is called")
            //this.$refs.myModalRef.show();
            //this.account=account;
        }
}

mais encore une fois, (variable i) qui est l'index du mot courant dans le tableau, n'est pas une variable globale à passer à 'myMethod' et il dit (i n'est pas défini). Je ne peux pas définir i sur une variable globale car c'est un index incrémenté à chaque fois dans la boucle. J'ai pensé à envoyer l'index actuel de la balise que je suis en train de modifier à la fonction, 'myMethod', afin que je puisse suivre la balise dans laquelle je me trouve et qu'elle est connue par le html dans le composant vue, mais je ne sais pas comment faire.

D'autres suggestions?


1 commentaires

Selon la façon dont il est ajouté au DOM, le lien avec l'événement onclick ne sera pas interprété par vue, et l'événement onclick ne se déclenchera pas. Essayez d'ajouter des liens vers votre page à l'aide de vue.js :

4 Réponses :


0
votes

Vous n'utilisez pas de gestionnaire Vue dans votre appel. Remplacez en cliquant par @click

so:

v-on:click="showModal"

ou, alternativement,

@click="showModal"


1 commentaires

j'ai essayé les deux ... cela ne me donne pas d'erreur maintenant, à la place quand j'appuie sur un mot pour invoquer la fonction onclick, la page me conduit au début de la page (la page monte) et elle ne console rien ce qui signifie toujours pas appeler la fonction



0
votes

Vous devez utiliser la syntaxe Vue onClick comme Gestionnaires d'événements de méthode Donc,

innerHTML = innerHTML.substring(0, index) +"<a href='#' v-on:click="showModal">"+ "<span  style=\"background-color: yellow\">" + innerHTML.substring(index, index + this.violations[i].length) + "</span>" + "</a>" + innerHTML.substring(index + this.violations[i].length);

doit être remplacé par

innerHTML = innerHTML.substring(0, index) +"<a href='#' onclick='showModal'>"+ "<span  style=\"background-color: yellow\">" + innerHTML.substring(index, index + this.violations[i].length) + "</span>" + "</a>" + innerHTML.substring(index + this.violations[i].length);


0 commentaires

0
votes

Bonjour Essayez simplement de supprimer href = '#' et ajoutez à la place href = "javascript: void (0)" avec @ click = "showModal" Cela peut aider


0 commentaires

5
votes

Lorsque vous utilisez des modèles Vue, vous avez accès à des syntaxes faciles à utiliser qui réduisent le temps de programmation, et il est fortement recommandé de commencer à rendre votre page en utilisant Vue à la place.

Dans le cas où vous êtes incapable d'utiliser Vue pour rendre votre page, vous pouvez toujours utiliser d'autres mauvaises techniques:

Commencez par ajouter une méthode de cycle de vie créée pour created qui déplace une référence pour votre méthode Vue vers la portée globale: created () {window.myMethod = this.myMethod;}

Puisque nous avons ensuite ajouté la méthode à la portée globale, vous pouvez simplement la référencer en utilisant mymethod dans votre gestionnaire onclick vanilla.

Notez que la solution de contournement ci-dessus ne prend pas en charge plusieurs instances de votre composant Vue, mais sa prise en charge devient beaucoup plus difficile, et vous devriez vraiment utiliser les composants Vue appropriés dans ce cas.


3 commentaires

ne fonctionne toujours pas :( j'ai fait ceci: created () {window.showModal = this.showModal;} ...... var test = document.getElementById ("test"); var innerHTML2 = test.innerHTML; innerHTML2 = " "+" test "+" "; test.innerHTML = innerHTML2; // je fais un test

contenant un mot pour faciliter les tests


salut, cela fonctionne maintenant .. je dois juste écrire le () lors de l'appel comme ceci: onclick = 'method ()', mais j'ai un autre problème maintenant, s'il vous plaît voir mon post mis à jour


Étant donné qu'InnerHtml est une chaîne, vous pouvez simplement écrire la valeur de directement dans votre chaîne: "" . Mais cela devient vraiment compliqué, et je vous suggère de rechercher un moyen de le faire avec des boucles Vue normales