Администратор виджета - Форма Отправки События?


Я создаю виджет и не могу понять, как получить событие прямо перед тем, как человек нажмет "сохранить" или нажмет кнопку ввода на панели администратора виджета. Каким будет код javascript для отправки события в форме администраторов виджета?

Пример: enter image description here

Спасибо!

Author: GavinR, 2015-08-15

3 answers

Вам нужно прослушать событие click (не существует такой вещи, как предварительный/предварительный щелчок) и выполнить некоторую работу прямо сейчас или выяснить, хотите ли вы разрешить click "пройти" или, например, не на основе какой-либо проверки.

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
Author: webtoure, 2015-08-18 13:30:24

Смотрите страницу Кодекса WordPress на API виджетов и используйте функцию update() в объявлении класса виджетов, как используется здесь и добавьте вызов скрипта в соответствующем месте:

/**
 * 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
Author: feelinferrety, 2015-08-18 19:03:02

1) Если вы хотите выполнить определенную операцию в качестве первого действия после нажатия кнопки "Сохранить", то вы бы добились этого с помощью сценария на стороне сервера (здесь PHP), подключившись к какому-либо действию, но поскольку вы четко указываете, что хотите только действие на стороне клиента, я думаю, что нет простого способа контролировать порядок даже, как click. Однако можно сделать одно следующее -

Если вам нужно выполнить более одной операции JavaScript, вы можете поместить свои функции в соответствующем порядке. например по щелчку func1() должен выполняться сначала, а затем func2(), поэтому просто вызовите их в таком порядке.

2) Если вам нужно выполнить только одну операцию JavaScript, то она в любом случае будет выполнена, а затем код на стороне сервера будет выполнен при отправке. ИЛИ, если этот подход не полностью выполняет вашу функцию JS в первую очередь, вы можете использовать preventDefault(), чтобы сначала выполнить вашу функцию JS, а затем автоматически отправить форму, используя только функцию JavaScript , например, доступна .submit() в jQuery

3) Помимо этого, у меня есть еще один способ, в котором я не совсем уверен, но который может вам помочь - Можете ли вы вместо этого использовать событие onfocus? Это будет выполнено до щелчка и будет работать как с мышью, так и с клавиатурой. Но недостатком является то, что он всегда будет выполнять ваш скрипт независимо от того, действительно ли пользователь отправил форму или нет.

4) Виджет WordPress сохраняет форму виджета через ajax, поэтому вы можете проверить, есть ли какой-либо доступный крючок, куда вы можете вставить свой скрипт и запустите свой скрипт до того, как запись формы будет фактически внесена в базу данных.

 0
Author: Domain, 2015-08-19 13:33:17