我有一个使用jqplot绘制图表的脚本。在加载文档时,它可以正常工作,使用jquery的.each方法渲染每个图形。但是,问题在于当我点击一个栏时我用另一个替换div。假设在旧图的位置渲染另一个图。它会更改图形,但不会执行脚本。
加载项目的脚本具有此功能,可将所有div更改为图形:
$("div.barchart").each(function(){
barChart($(this).attr("id"),$(this).attr("data-xmlurl"));
});
还有另一种方法可以做到这一点,以便在更改div时也能正常工作吗?
Rails生成一个运行的脚本。但是,当我有这个时,它似乎不起作用:
chart$=$("#<%=params[:chart_id]%>");
chart$.replaceWith("<%=escape_javascript(render :partial=>"chart_partial"}%>");
barChart(chart$.get(0).attr("id"),chart$.get(0).attr("data-xmlurl"));
作为参考,可以在jquery_cheats project
中找到实际的源代码答案 0 :(得分:3)
也许你可以在父元素上添加一个监听器?如果多次调用barChart()函数,它可以吗?
也许是这样的:
$("div.barchart").parent().on("DOMSubtreeModified", function(e) {
// (or maybe use DOMNodeInserted event instead)
$("div.barchart[id][data-xmlurl]").each(function() {
barChart($(this).attr("id"),$(this).attr("data-xmlurl"));
});
});
您可以在此处查看我的jsFiddle。
答案 1 :(得分:0)
在我正在处理的当前应用程序上,我坚持使用1.5.2版本。为了解决这个问题,我将取消绑定并重新绑定我的事件并在“ajaxComplete”和“ready”中加载初始化。我无法让DOM自动重新绑定事件。委托假设像“on”一样工作,但在我的实例中,我仍然必须使用以下逻辑。
简而言之,它看起来就像这样。
$(document).ready(function () {
InitSomethingCool();
});
$(document).ajaxComplete(function() {
InitSomethingCool();
});
function InitSomethingCool(){
$(".something").unbind('click').click(function(e) {
//Unbind and rebind click event.
alert('You clicked me!');
});
}
参考: