插入div时运行脚本

时间:2012-07-23 17:27:10

标签: javascript jquery ruby-on-rails-3 jqplot

我有一个使用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

中找到实际的源代码

2 个答案:

答案 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!');
    });
}

参考: