控件的输出代码form
方法为小部件的每个实例(包括“可用小部件”面板中包含的“虚拟”实例)添加到页面一次,因此在您的示例中,定义window.send_to_editor
函数可能会出现多次,最后一个实例会覆盖以前的实例。至少有两个原因导致form
方法:
创建小部件的新实例(使用拖放)时,“dummy”(标记为)的html代码__i__
索引)被复制到新创建的小部件,索引被替换为一个数字,但事件处理程序没有被复制,因此新小部件可能不会按预期运行保存小部件时,数据通过ajax发送到服务器,并输出form
方法被发送回页面,然后动态添加到DOM中。根据jQuery documentation, “检索到的数据中的任何嵌入JavaScript都是在HTML作为字符串返回之前执行的”,这可能会导致奇怪的行为(此外,并非所有浏览器都有相同的行为)我建议您将javascript代码放在单独的js文件中,并使用wp_enqueue_script
并使用jQuerylive
方法添加事件处理程序。您可以对所有实例使用通用事件处理程序,然后查找适当的DOM元素来应用相关操作。示例:
jQuery(\'input[id^=uploadi]\').live(\'click\', function() {
formfield = jQuery(\'input[id^=qrimage]\', jQuery(this).closest(\'.widget\')).attr(\'name\');
tb_show(\'\', \'media-upload.php?type=image&TB_iframe=1\');
return false;
});
注:更改
qrimage
选择上面代码中的选择器(未测试),以确定字段前缀是什么。
P、 我还注意到url中有一个拼写错误media-upload.php?type=image&&TB_iframe=1