我正在从事一个涉及许多小部件的项目,我认为使用jQuery UI Accordion构建一个“更多选项”部分并在单击时展开会非常好。
因此,我使用“admin\\u enqueue\\u scripts”操作将“jquery ui accordion”排入队列:
function add_my_deps() {
wp_enqueue_script(\'jquery-ui-accordion\');
}
add_action( \'admin_enqueue_scripts\', \'add_my_deps\' );
。。。我的JavaScript如下所示:
(function($){
$(\'.more-options-expansible\').accordion();
})(jQuery)
Now what?
如果我通过上面的“add\\u my\\u deps”操作将其排队,则只有在我重新加载页面时才有效(即,放置小部件时,JavaScript在创建元素之前实例化;如果保存小部件,则其JavaScript按正常方式排队,并按正常方式实例化)。
如果我把它放在<script>
在我的小部件的HTML输出末尾添加标记form()
方法,我得到以下异常:Uncaught TypeError: Object [object Object] has no method \'accordion\'
. 这是因为它似乎是通过内联来实例化手风琴的<script>
在加载jQuery UI Accordion库之前。
我有什么明显的缺失吗?在这个示例中,我使用了一个简单的jQuery实例化,但如果我尝试使用AJAX做任何事情,似乎会遇到更严重的问题(即,我将如何选择适当的元素来放置响应?这是我需要开始使用Backbone.js来完成的吗?)。
有什么帮助吗?
SO网友:scottsawyer
WordPress添加了一些JavaScript事件、“添加了小部件”、“更新了小部件”、“同步了小部件”,因此您不再需要破解ajax事件。
https://core.trac.wordpress.org/ticket/19675
因此,我认为您应该在外部js文件中将代码更新为如下内容:
$(document).on(\'widget-added\', function(event, widget) {
$(widget).find(\'.more-options-expansible\').accordion();
}
您可能需要为“widget updated”和“widget synched”添加类似的内容,因为它们都会影响您的dom。