1

jqplotを使用してグラフ化を行うスクリプトがあります。ドキュメントが読み込まれると、jqueryの.eachメソッドを使用して各グラフをレンダリングするときに正常に機能します。ただし、バーがクリックされたときにdivを別の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 に答える