Darryl Watson wrote:
>
> Hello again-
> 
> I'm using IE6 and ASV 3.03.
> 
> I think I'm struggling with some misconceptions about how events 
work in 
> SVG.  I have an embedded SVG document, and most of the time, I 
have a 
> common set of onclick and onmouseover handlers defined on the SVG 
tag of 
> the document, which reference inline JS code.  Thus:
> 
>     <svg id="SVGDoc" onclick="internal_click(evt);" 
> onmouseover="internal_mouseover(evt);" ... >
> 
> I also have what I am calling 'external' javascript, which is code 
> included in the HTMl document containing the SVG embed.  So I have 
that 
> across-the-embed thing going for me.  :)
> 
> Anyway, under certain conditions, I'd like to disable or redefine 
the 
> document's internal event handlers and call external routines 
instead.  
> Because this gets triggered by a button click in the parent HTML, 
I'd 
> like to redefine these event handlers in the parent HTML.  So I am 
> trying to do something like this:
> 
>     function onclick_change(e)
>     {
>        var embed = document.getElementById('SVGEmbed');
>        var svgdoc = embed.getSVGDocument();
>        var svgroot = svgdoc.getDocumentElement();
> 
>        svgroot.onclick=null;            //   I've also tried 
svgdoc here...
>        svgroot.onmouseover=null;
>        svgdoc.getElementById('myTopLayer').onclick=function() { 
> top.external_click(evt); };
>     }
> 
> No joy.  I'm not disabling the SVG document event handlers, and 
> therefore my top layer event handlers don't get called.  I've 
tried to 
> use setAttributeNS calls as well, without success.  I suspect I'm 
not 
> pointing to the right DOM elements... got any hints about how to 
do this?
> 
> Thanks!
>

Hi Darryl,

Try this: Place both functions in the HTML. I normally do not put 
functions in the SVG, unless absolutely necessary. It's easier for 
debugging if I have all functions in HTML

EXAMPLE:

HTML file:

<HTML>
<BODY onLoad=init()>
<embed name="svgEmbed" src="mySVG.svg" width="500" height="400" 
type="image/svg+xml">
<br>
<button onClick=changeIt()>change</button>
<script>
var mySVG
function init()
{
        docSVG=document.embeds["svgEmbed"].getSVGDocument()
        mySVG=docSVG.getElementById("mySVG")
}

//--- mySVG initial onclick----
function internalClick()
{
        alert("Internal")
}

function externalClick()
{
        alert("external")
}
//---button for test(toggle)---
function changeIt()
{
        if(mySVG.getAttribute("onclick")=="internalClick()")
                mySVG.setAttribute("onclick","externalClick()")
        else
                mySVG.setAttribute("onclick","internalClick()")
}
</script>
</BODY>
</HTML>

mySVG.svg file:

<?xml version="1.0" ?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 
1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"; >
<svg width="500" height="400" id="mySVG" onclick="internalClick()" >
<rect x="0" y="0" width="500" height="400" fill="blue"/>
</svg>


This may not fully address what you want to do, but try it, and get 
back if I missed your need.

Regards,
Francis








-----
To unsubscribe send a message to: [EMAIL PROTECTED]
-or-
visit http://groups.yahoo.com/group/svg-developers and click "edit my 
membership"
---- 
Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/svg-developers/

<*> To unsubscribe from this group, send an email to:
    [EMAIL PROTECTED]

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/
 


Reply via email to