2016-08-18 13 views
0

DIVに異なるSVGをロードしていて、うまく動作しますが、onclickバインディングが機能していません。ロード後に 'onclick'イベントをSVG要素 'rect'に添付する

ロード後、LoadSVGBindings関数を呼び出してonclickバインディングを設定します。

唯一の方法は、FireFoxでデバッグすることです。 LoadSVGBindings関数で停止した後、再開するとすべて正常に動作します。

//HTML code 
<div id="TheSVG"></div> 


//LoadSVG function 
function LoadSVG(Mode){ 

    $.ajax({ 
     type: "GET", 
     url: 'data/' + Mode + '.svg', 
     dataType: "text", 
     contentType: "charset=UTF-8", 
     success: function(data) { $('#TheSVG').html(data); }, 
     error: function(request, status, error) {alert("Error: " + error);}, 
    }); 

    SetSVGBindings(); 
} 


//Set after loading the SVG 
function SetSVGBindings(){ 

    $('polygon').on('click', function() { 
     alert("polygon"); 
    }); 

    $('rect').on('click', function() { 
     alert("rect"); 
    }); 
} 

何がうまくいかないか、正しく動作させる方法がわかりません。

+0

私はそれを信じることができません! – TresRRR

+0

それは魅力のように動作します。 – TresRRR

答えて

2

SVGがロードされた後、成功関数でSetSVGBindingsを呼び出す必要があります。

SVGがロードされる前にSetSVGBindingsという質問に書いた方法が呼び出され、CSSセレクタがバインドするためのSVG要素はドキュメントにはありません。ここで

0

はマイル関数は、以前に動作しなかった理由、それは成功で終了関数の後にロードされたすべての後、私は、正確に理解していない今

function LoadSVG(Modo){ 

     $.ajax({ 
      type: "GET", 
      url: 'Apoyos/bootstrap/data/' + Modo + '.svg', 
      dataType: "text", 
      contentType: "charset=UTF-8", 
      success: function(data) { $('#SVG').html(data); SetSVGBindings();}, 
      error: function(request, status, error) {alert("Error: " + error);}, 
     }); 
    } 

です。

多くの感謝

+0

「成功して機能が終了した後はすべてがロードされた後」、**いいえ、それは**ではありませんでした。 '$ .ajax'は*非同期*です。ブロックされず、スクリプトは続けられ、' $ .ajax'が終了する前に 'SetSVGBindings'が呼び出されます。 – Mark

関連する問題