在后台添加Widget时执行Java脚本

时间:2014-01-17 作者:Tom J Nowell

我有一些附带javascript控件的小部件。

如果加载小部件管理页面时小部件存在,则控件工作正常。

当我添加一个新的小部件时,它们不能正常工作,我得到了标记,但没有javascript事件生效。

如果我保存新的小部件,当表单重新加载时,控件将正确创建,现在可以工作了。

刷新页面也可以解决此问题,但仅适用于现有小部件。新的widget仍然存在这个问题。

具体而言,我在以下几点上对选择输入运行selectize:

我已经验证了我的代码在每个事件上都按预期运行,但结果不符合预期。

下面是一个测试插件,演示了该问题:

https://gist.github.com/Tarendai/8466299

您将看到,我有一个计数器,它随着找到的每个可以转换的select元素而增加。

备注:

加载小部件页面时,我可以在JS控制台中看到计数器按预期增加。当我添加一个新的小部件时,代码会运行,但是,它找不到任何可以运行的选择元素,如find所示。长度为0。不应该是这种情况,因为该类型的每个新小部件都应该有一个select元素,select元素有一个类来标识它们,一旦应用selectize库,该类就会被删除,以防止在现有小部件上重复和重新处理

1 个回复
SO网友:chifliiiii

正如@aaron holbrook评论的那样,一种更干净的方法将是:

jQuery(document).on(\'widget-updated widget-added\', function(){
    // your code to run
});
在许多情况下,您还需要在页面加载以及小部件更新时运行JS。你可以这样做。

function handle_widget_loading(){
   // your code to run
}
jQuery(document).ready( handle_widget_loading );
jQuery(document).on(\'widget-updated widget-added\', handle_widget_loading );
只是粘贴在这里作为参考,因为答案更容易找到评论

结束

相关推荐

"Widgets" menu doesn't appear

我正在开发一个WordPress主题,它在我的本地主机和一个live server上运行得很好,但在我的另一个live server上,小部件菜单(从外观)不会出现。是的,所有3台服务器都有相同的3.6.1 WordPress版本,主题文件也相同。知道这是什么原因吗?这是functions.php 注册小部件区域:if (function_exists(\'register_sidebar\')) { register_sidebar(array( \'name\' => \