附加' onclick'事件到SVG元素' rect'装货后

时间:2016-08-18 20:27:20

标签: javascript jquery d3.js svg

我在DIV上加载了不同的SVG并且工作正常,但onclick绑定无效。

加载后,我调用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");
    });
}

我无法弄清楚出了什么问题或如何让它正常工作。

2 个答案:

答案 0 :(得分:2)

您需要在成功函数中调用SetSVGBindings,即在加载SVG之后。

你在问题​​SetSVGBindings中编写它的方式将在SVG加载之前被调用,并且文档中的任何SVG元素都不会被CSS选择器绑定。

答案 1 :(得分:0)

现在是mi功能

    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);},
         });
    }

我不明白为什么它之前没有用,毕竟它是在功能完成后加载的。

非常感谢