1

我有一个使用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 项目中找到

4

2 回答 2

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 。

于 2012-07-23T17:36:28.313 回答
0

在我正在处理的当前应用程序中,我坚持使用 1.5.2 版。为了解决这个问题,我将取消绑定并重新绑定我的事件并在“ajaxComplete”和“ready”中加载初始化。我无法让 DOM 自动重新绑定事件。代表应该像“开”一样工作,但在我的例子中,我仍然必须使用下面的逻辑。

简而言之,它看起来像这样。

$(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!');
    });
}

参考:

于 2012-07-23T17:48:38.427 回答