2014-01-13 51 views
0

是否有可能将cakephp中的事件绑定到svg节点元素?Cakephp JsHelper和SVG

我有RequestHandler与divs正常工作,但我是 要求在页面中设置一个SVG,它有几个可点击的区域。

如果我这样做了下面的代码:

<object id="mysvg" type="image/svg+xml" data="/img/mysvg.svg"> 
    <p>Error, browser must support "SVG"</p> 
</object> 

然后添加jshelper代码:

$this->Js->get('#mysvg-nodeID')->event('click', $this->Js->request(
array('action' => 'myaction', 'param01'), 
array('async' => true, 'update' => '#main_div'))); 

这似乎并没有工作。 任何人都可以分享一些想法?

问候谨慎

+0

您的对象代码和js helper中使用的代码的ID似乎有所不同。好心检查。 – Rikesh

+0

感谢Rikesh的反馈。但我指的是SVG中特定节点的Id,而不是整个对象。小提琴示例http://jsfiddle.net/ZWK2U/ – rramos

回答

0

回答我自己的问题,以防其他人也需要这个。

有可能是一个更好的解决方案,请分享,如果你找到一个:)

无论如何,这一个提供它的目的。由于我没有找到一种方法来获得 与svg节点相关的事件,我为该部分添加了javascript。

<script type="text/javascript"> 
     //<![CDATA[ 
     var a = document.getElementById("mysvg"); 

     //it's important to add an load event listener to the object, as it will load the svg doc asynchronously 
     a.addEventListener("load",function(){ 
      var svgDoc = a.contentDocument; //get the inner DOM 
      var delta = svgDoc.getElementById("mysvg-nodeID"); //get the inner element by id 
      delta.addEventListener("mousedown", 
       function(){ 
       <?php 
        echo $this->Js->request(array('action' => 'myaction', 'param01'),array('async' => true, 'update' => '#main_div')); 
       ?> 
       },false); //add behaviour 
</script> 
相关问题