web-dev-qa-db-fra.com

Widget Admin - Form Soumettre un événement?

Je crée un widget et je ne peux pas trouver comment obtenir un événement juste avant que la personne clique sur "Enregistrer" ou n'appuie sur le bouton Entrée du panneau d'administration du widget. Quel serait le code javascript pour obtenir l'événement sur le formulaire des administrateurs de widgets?

Exemple: enter image description here

Merci!

1
GavinR

Vous devez écouter l’événement click (il n’existe pas de clic pré/avant) et travailler à l’époque ou déterminer si vous souhaitez autoriser la click à "passer à travers" ou non en fonction d’une validation, par exemple. .

jQuery(function($) {
    // We are binding to the body so that the code
    // will work for future elements added to the DOM
    $('body').on('click', '.widget-control-save', function(ev) {
        var my_validation = true;

        if ( my_validation ) {
            console.log('widget save!');
        } else {
            ev.preventDefault();
            ev.stopPropagation(); /* We are capturing the event so it won't bubble up. */
        }
    })
});
5
webtoure

Voir la page WordPress Codex sur API de widgets et utilisez la fonction update() dans votre déclaration de classe de widget telle qu'elle est utilisée ici et ajoutez un appel de script à l'endroit approprié:

/**
 * Processing widget options on save
 *
 * @param array $new_instance The new options
 * @param array $old_instance The previous options
 */
public function update( $new_instance, $old_instance ) {
    // processes widget options to be saved
?>
    <script type="javascript">
        /*Your function here*/
    </script>
<?php
    // be sure to include normal save functions as defined by Codex / source code
}
1
feelinferrety

1) Si vous souhaitez effectuer certaines opérations en tant que première activité après avoir cliqué sur le bouton de sauvegarde, vous l’auriez réalisé via un script côté serveur (ici PHP) en effectuant une opération, mais en spécifiant clairement que vous souhaitez que le côté client seule action, je pense qu’il n’existe aucun moyen simple de contrôler l’ordre du même click. Cependant, un suivant peut être fait -

Si vous devez exécuter plusieurs opérations JavaScript, vous pouvez alors classer vos fonctions dans l'ordre. par exemple. sur click, func1() doit d'abord s'exécuter puis func2(), appelez-les dans cet ordre.

2) Si vous devez effectuer une seule opération JavaScript, il sera de toute façon exécuté et le code côté serveur sera exécuté lors de la soumission. OR si cette approche n'exécute pas complètement votre fonction JS en premier, vous pouvez utiliser preventDefault() pour laisser votre fonction JS s'exécuter en premier, puis soumettre automatiquement le formulaire à l'aide de la fonction JavaScript uniquement, par exemple. .submit() est disponible dans jQuery

3) En dehors de ceux-ci, j'ai un autre moyen dont je ne suis pas tout à fait sûr mais qui peut vous aider - Pouvez-vous utiliser l'événement onfocus à la place? Cela s'exécutera avant le clic et fonctionnera avec la souris et le clavier. Mais un inconvénient est qu’il exécutera toujours votre script, que l’utilisateur ait effectivement soumis le formulaire ou non.

4) Le widget WordPress enregistre le formulaire de widget via ajax afin que vous puissiez vérifier s'il existe un crochet permettant d'injecter votre script et de l'exécuter avant que la saisie du formulaire ne soit réellement effectuée dans la base de données.

0
WisdmLabs