现在,我使用 jQUery(document).ready
将 javascript“注入(inject)”到 div 中。
一切都很好 - 但问题是 - 同一个 div 正在通过 AJAX 刷新 - 并且在这种情况下 JS 没有被“重新注入(inject)”..
(如果有人感兴趣 - div 实际上是“wordpress“小部件管理”区域中的小部件)
我的问题是 jQuery(document).ready
显然不起作用(DOM 已经“准备好”),当我尝试 jQuery('#divname').ready
- 我也无法让它工作。
我什至尝试了.ajaxComplete()
但无济于事......
我不确定这是一般方法问题还是特定的 WP 小部件问题。
编辑我 - 为了满足大众的要求:我的脚本:-)
//php wrapper function here ...
// .. php stuff.
return "
<script type='text/javascript'>
var map;
var markersArray = []; // to be used later to clea overlay array
jQuery(document).ready(function() {
var lat = ". $lattxt . " ; // .. php variable.
var lon = ". $lontxt . " ; // .. php variable.
var marker;
// ...continue boring google map code
};
map = new google.maps.Map(jQuery('#DivName')[0], myOptions);
// ...tinue boring google map code
function placeMarker(location) {
///...continue boring google map code
}
}
});</script>
<div id='DivName' style='height:200px; width:100%;' ></div><br />
";
我实际上正在做的是创建一个 DIV 并启动谷歌地图。 问题是当这个“小部件”(或“div”)通过 AJAX 选项“保存”并刷新时 - Javascript 不起作用(它被注入(inject)到代码中 - 但不是“启动..”)
正如我之前所说 - 这个方法在“第一次”运行时工作得很好 - 但如果 div 被刷新 - 它就不再工作了,即使 div 在那里并且 javascript 也在那里......
编辑1:
我发现以下链接可能会或可能不会帮助任何遇到类似问题的人:
问题的简短解释以及可能的解决方案: http://www.johngadbois.com/adding-your-own-callbacks-to-wordpress-ajax-requests/
两个相关问题:
jQuery Functions need to run again after ajax is complete
话虽如此 - 我还无法解决我的具体问题。如果我愿意,我会发布完整的答案。
最佳答案
我不确定您是否可以使用 WP 回调,但处理这些类型情况的纯 jQuery 方法是将事件处理委托(delegate)给最近的包含永远不会刷新的 HTML 元素.
曾经有“.delegate()”,但在最近的版本中您可以使用:
$('#nearest-stable-container').on("click", ".widget", function(){...});
因为处理程序附加到永远不会离开 DOM 的东西,所以这在对“.widget”的更改中仍然存在。
关于div 刷新时的 Jquery 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9740668/