11
votes

Utilisez jQuery .trigger pour appeler une fonction personnalisée qui renvoie une valeur

Y a-t-il un moyen d'utiliser les appels de JQuery .bind () et .Trigger () pour exécuter une fonction définie par l'utilisateur (ex: sauvegarde ()) et agissez à la suite de la méthode? Par exemple: xxx

puis: xxx


0 commentaires

4 Réponses :


3
votes

Pourquoi n'agissez-vous pas sur la valeur de retour dans le rappel lui-même? Il enlève le chèque supplémentaire (qui ne fonctionnera pas comme si vous vous attendez à).

$("#aForm").bind ('save', function () {
  if(some stuff happens that is true) {
      doSomething();
  }

  else {
      doSomethingElse();
  }
});


4 commentaires

J'essaie d'éviter de faire cela pour la simple raison que j'ai plusieurs formulaires dans une boîte de dialogue (chacun dans un onglet séparé). J'aimerais que la boîte de dialogue elle-même utilise en réalité appeler la méthode "Save" de chaque formulaire individuellement en fonction d'un drapeau "sale". C'est pourquoi j'essaie de résumer le "Dosomething ()" et "DosomsOrtOnse ()" "" "fonctionne des formulaires - c'est-à-dire la boîte de dialogue principale gère le flux global. Je veux juste que chacun des formulaires traite de sauver leurs données - ou de retourner false si une erreur se produit lors de la sauvegarde de leurs données. Est-il possible d'ajouter une fonction "Enregistrer" personnalisée à chaque formulaire à l'aide de .extend ()?


Pourquoi n'avez-vous pas une méthode de validation qui gère la validation. Vous devez vous attacher à l'événement Soumettre de votre formulaire, puis exécutez la validation. Si la validation réussit, soumettez le formulaire.


Le long de la même veine, cela ne serait-il pas possible pour moi d'ajouter une nouvelle fonction appelée «sauvegarder» ou «sauvegarda» comme le plugin de validation doit ajouter une nouvelle capacité au formulaire, puis utiliser cette méthode pour enregistrer les données. ? Je n'ai pas fait de plugin, mais cela semble être le moyen le plus élégant d'atteindre ce que j'essayais de faire, non?


Bien sûr, vous pouvez le faire si vous devez effectuer une demande AJAX de quelque sorte (ou devez modifier les données). Mais en général, si vous avez lié à l'événement , il vous suffit de renvoyer le résultat de la validation. L'événement Soumettre est spécial dans le sens où il inspecte la valeur de retour du gestionnaire pour voir si elle doit soumettre le formulaire.



8
votes

Je sais que cette question est ancienne, mais peut-être que cela peut aider quelqu'un.

Comme Paliat pointe, vous ne pouvez pas retourner une valeur car l'événement déclencheur est asynchrone. Ce que vous pouvez faire, c'est transmettre un objet comme paramètre à l'événement. Par défaut, les objets JavaScript sont toujours des références à l'original. P>

par exemple par exemple.: P>

Bind: P>

var ret = {ret:true};
$(...).trigger('example',[ret]);
if (!ret.ret)
    //event return false
else
    //event returned true


6 commentaires

Potentiellement, oui. Si utilisé correctement :)


Nope ça ne va pas. Vous passez la référence de l'objet (true) à la gâchette de l'événement et de le déclencher. Le gestionnaire d'événements modifie la valeur ASYNC avec AJAX à FALSE. Disons que Ajax se termine dans 10 secondes. Donc, en 10 secondes, la valeur sera devenue fausse. Mais vous le vérifiez immédiatement après la gâchette et vous obtenez une mauvaise valeur de vrai. J'espère que j'étais clair.


Vous pouvez utiliser déclencheur au bon moment, juste après la finition AJAX.


Pourquoi faire ça et comment le temps? Il suffit d'utiliser triggerhandler qui attendra l'appel ASYNC à compléter.


Je le déclenche habituellement à l'intérieur du rappel "Success" de l'appel Ajax. De cette façon, assurez-vous que tout fonctionne quand il est censé.


Ok, je ne suis pas suivi de quoi visez-vous de résoudre. Désolé, cela peut ne pas fonctionner pour vous.



5
votes

Consultez Triggerhandler () , qui agit de nombreuses autres manières comme déclencheur () mais vous permettra de retourner une valeur.

de la DOCS:

La méthode .TriggerHandler () se comporte de la même manière à .trigger (), avec le Exceptions suivantes:

  • La méthode .TriggerHandler () ne provoque pas le comportement par défaut d'un événement (tel qu'une soumission de formulaire).
  • tandis que .Trigger () fonctionnera sur tous les éléments correspondés par l'objet JQuery, .TriggerHandler () n'affecte que le premier élément correspondant.
  • événements créés avec .TriggerHandler () ne bulle pas la hiérarchie DOM; S'ils ne sont pas traités directement par l'élément cible, Ils ne font rien.
  • au lieu de retourner l'objet JQuery (pour la chaînage), .TriggerHandler () renvoie quelle que soit la valeur renvoyée par le dernier gestionnaire qu'il a causé d'être exécuté. Si aucun gestionnaire n'est déclenché, il retourne non défini

0 commentaires

4
votes

Vous pouvez également utiliser jQuery intégré événement.preventDefault () et événement.isdefaultprevent () : xxx

et ensuite: < Pré> xxx


0 commentaires