Como faço para religar evento após salvar o widget?

4

Estou escrevendo um widget ao qual os elementos de formulário têm um evento de clique anexado. Eu o vinculo usando jQuery.

No entanto, depois de clicar em save , as ligações são perdidas. Ou seja, clicar nesses elementos não aciona mais a função.

Eu tentei usar o método on() jQuery, como sugerido aqui , mas isso não ajuda:

    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());
    });

Eu poderia colocar meu código js dentro do formulário do widget, como sugerido aqui . Isso resolve o problema, mas eu realmente prefiro manter meu código js separado.

O que preciso fazer para manter o evento de clique desses elementos funcionando mesmo depois que o botão save é clicado?

    
por Lea Cohen 19.03.2013 / 13:53

3 respostas

0

Como a caixa de entrada está sendo reconstruída (ou o formulário inteiro), segui o conselho que me foi dado em outro lugar e, em vez de ligar () a uma caixa de entrada, vinculo-a mais acima e use a delegação de evento:

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

Eu ainda coloco algumas declarações de variáveis js dentro do formulário do widget, mas isso é apenas por conveniência, e são apenas algumas linhas de código, então eu não me importo muito com isso.

    
por Lea Cohen 26.03.2013 / 19:29
6

O Wordpress fornece retornos de chamada para interações de widgets. Você parece interessado em dois deles:

widget adicionado, atualizado por widget

Exemplo de uso:

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

Eu adicionei seu código e ele foi corrigido para widget atualizado, ou seja, conforme eu atualizo o widget, todas as opções funcionam bem. Mas agora, ao adicionar qualquer novo widget, ele não funciona bem até que eu atualize a página ou clique em salvar uma vez.

Estou tentando corrigir o código abaixo no meu projeto:

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

Eu também tentei assim

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

Mas ainda não funcionou para o novo widget adicionado. Por favor, ajude a resolver este problema.

Obrigado.

    
por Adeel 08.05.2015 / 01:47