0
votes

Appel de fonction imbriquée à OnClick pas de tirer

J'ai une application écrite en JavaScript avec réaction. Lorsque vous cliquez sur un bouton dans Safari sur iOS, l'ONCLICK exécute la fonction spécifiée dans son corps, mais cette fonction prend une autre fonction de rappel et que la fonction de rappel ne se déclenche pas.

Si je viens d'envoyer le rappel sans anonyme fonction, ça fonctionne. Mais si j'utilise une fonction anonyme pour appeler le rappel, cela ne fonctionne pas. P>

Le code ci-dessous est une extraction du rendu () - méthode de la classe de réaction. P>

Cela ne fonctionne pas dans Safari sur iOS (mais fonctionne simplement bien en chrome sur iOS): p> xxx pré>

Ceci fonctionne dans Safari sur iOS et chrome sur iOS: P>

<button className="button-top-level" data-selenium-id="preview"
          onClick={() => {
            this.props.saveApplicationFunction(null, this.refs.downloadButton.click());
          }} type="button"><i className="material-icons">picture_as_pdf</i>Download a <span className="mobile-hide">copy of your </span>application</button>


2 commentaires

Vous SaveApplicationFunction prend une fonction de rappel comme deuxième argument. Vous devez simplement passer le nom de la fonction. Ce que vous faites, c'est appeler la fonction dans le deuxième argument. Ce que cela fait en retour est simplement défini la valeur de retour de la fonction comme rappel.


Où est le code de SaveApplicationFunction () ?? Dans votre premier exemple, vous transmettez une référence à une fonction qui arrive ensuite une fonction. Dans votre deuxième exemple, vous passez une fonction qui est immédiatement appelée


4 Réponses :


0
votes

Le premier exemple Vous passez une fonction qui doit être appelée sur votre SaveApplicationFunction pour obtenir la fonction Cliquez sur , le deuxième exemple que vous passez à votre SaveApplicationfunction le retour du Cliquez sur Fonction appelée dans cette portée.


0 commentaires

0
votes

Utilisez un écouteur d'événement en JS, pas l'attribut HTML.

document.getElementsByClassName("button-top-level").addEventListener("click", function() {
    /*Your code here*/
});


1 commentaires

J'utilise réagi et je ne suis pas sûr que ce soit la bonne façon d'y aller, désolé de ne pas mentionner que explicitement (la poste originale a été modifiée pour mentionner que maintenant)



0
votes

mon devinez est votre SaveApplicationFunction code> prend un Callback code> comme deuxième argument. Vous devez simplement passer le nom de la fonction fort>. Ce que vous faites est appeler la fonction em> forte> dans le deuxième argument. Ce que cela se trouve vient de définir la valeur code> renvoyer code> de la fonction sous la forme code> Callback code>.

p>

function handler(value, callback){
  callback(value);
}

const callbackFunc = val => {
  if(val) console.log(val);
  return ()=>console.log('I do Nothing');
}

handler(5, callbackFunc); //Your Second Snippet
handler(5, callbackFunc()); //Your First Snippet


3 commentaires

Le premier exemple fonctionne bien en chrome pour iOS, pourquoi est-ce?


Lequel fonctionne sur iOS et lequel fonctionne sur chrome?


Le premier fonctionne en chrome sur iOS, deuxième fonctionne dans Safari sur iOS.



0
votes

dans le premier extrait Vous appelez la fonction de réponse et la valeur de retour de la fonction en tant que paramètre mais

dans second snippet Vous ne faites que passer définition de fonction et je pense que la fonction this.props.saveapplicationfunction n'accepte pas le deuxième deuxième paramètre à être un rappel qui appellera.


0 commentaires