WordPress定制器加载完成后的回调

时间:2017-02-15 作者:Aumkar Thakur

我面临一个问题,我试图在文本小部件中选择textarea,但问题是customizer在其中动态附加内容,所以我无法选择它。我已成功选择了小部件内容所在的列表:

jQuery(\'[id^="customize-control-widget_text"]\').each(function(){
    var each_text_widget_id = jQuery(this).attr(\'id\');
    var textarea_inside_text_widget = $("#"+ each_text_widget_id ).find(\'textarea\').attr(\'id\'); // Not Working Since Dynamically Appending

});
如果我将此代码放入setInterval 但这并不是很好的做法。因此,我正在寻找定制器加载后的回调函数。

1 个回复
最合适的回答,由SO网友:Weston Ruter 整理而成

您需要等待创建小部件控件,然后才能尝试。您可以通过收听add 事件wp.customize.control. 下面是一些示例代码,可以实现您想要的功能:

( function( api ) {
    function handleTextWidgetControl( control ) {
        if ( ! control.extended( api.Widgets.WidgetControl ) ) {
            return;
        }
        if ( \'text\' !== control.params.widget_id_base ) {
            return;
        }

        /*
         * Make sure the widget\'s contents are embedded; normally this is done
         * when the control is expanded, for DOM performance reasons.
         */
        control.embedWidgetContent();

        // Now we know for sure the widget is fully embedded.
        console.info( control.container.find( \'textarea\' ).attr( \'id\' ) );
    }
    api.control.each( handleTextWidgetControl );
    api.control.bind( \'add\', handleTextWidgetControl );
})( wp.customize );