it-swarm.com.de

Wie binde ich ein Ereignis nach dem Speichern des Widgets neu?

Ich schreibe ein Widget, an dessen Formularelementen ein Klickereignis angehängt ist. Ich binde es mit jQuery.

Nach dem Klicken auf save gehen die Bindungen jedoch verloren. Das heißt, durch Klicken auf diese Elemente wird die Funktion nicht mehr ausgelöst.

Ich habe versucht, die jQuery-Methode on() zu verwenden (siehe hier ), aber das hilft nicht:

    var buttonsHolder=jQuery('#widgets-right .icon_buttons');            
    // save the array of big icons, for later reference, and assign them the click event
    var  buttons=buttonsHolder.children('input');
    buttons.on("click",function(){
        openPanel(jQuery(this),jQuery(this).index());
    });

Ich könnte meinen js-Code in das Widget-Formular einfügen, wie vorgeschlagen hier . Das löst das Problem, aber ich bevorzuge es wirklich, meinen js Code getrennt zu halten.

Was muss ich tun, damit das click-Ereignis dieser Elemente auch nach dem Klicken auf die Schaltfläche save funktioniert?

4
Lea Cohen

Da das Eingabefeld neu erstellt wird (oder das gesamte Formular), habe ich die Anweisungen befolgt, die mir an anderer Stelle gegeben wurden, und anstatt on () an ein Eingabefeld zu binden, binde ich es höher und verwende die Ereignisdelegierung:

jQuery('#widgets-right').on('click','.icon_buttons input',function(){
     openPanel(jQuery(this),jQuery(this).index());
});

Ich habe immer noch einige Variablendeklarationen von js in das Widget-Formular eingefügt, aber das dient nur der Vereinfachung und es sind nur ein paar Codezeilen, daher macht es mir nichts aus.

0
Lea Cohen

Wordpress bietet Rückrufe für Widgets-Interaktionen. Sie scheinen an zwei von ihnen interessiert zu sein:

Widget hinzugefügt, Widget aktualisiert

Anwendungsbeispiel:

jQuery(document).on('widget-updated', function(e, widget){
    // do your awesome stuff here
    // "widget" represents jQuery object of the affected widget's DOM element
});
6
Sergey Arefiev

Ich habe Ihren Code hinzugefügt und er wurde für Widget-Aktualisierungen behoben, d. H., Wenn ich Widget aktualisiere, funktionieren alle Optionen einwandfrei. Aber jetzt, da ich ein neues Widget hinzufüge, funktioniert es nicht mehr richtig, bis ich die Seite aktualisiert oder einmal auf Speichern geklickt habe.

Ich versuche, den folgenden Code in meinem Projekt zu korrigieren:

$( document ).on( 'widget-updated' , function( event, $widget ){
    $('.of-color').wpColorPicker();
    $('.selectpicker').selectpicker();
});

Ich habe es auch so versucht

$( document ).on( 'widget-updated widget-added' , function( event, $widget ){
    $('.of-color').wpColorPicker();
    $('.selectpicker').selectpicker();
});

Funktionierte aber immer noch nicht für neu hinzugefügte Widgets. Bitte helfen Sie, dieses Problem zu beheben.

Vielen Dank.

0
Adeel