It seems that using a <svg:svg> </svg:svg>
element does not render anything in Safari or Chrome, but using <svg> </svg>
works fine. However, adding an onclick
only works on <svg:svg>
elements. What is the proper way to do this?
This jsfiddle demonstrates the problem (compare Safari/Chrome to Firefox).
The onclick attribute specifies some script to run when the element is clicked. You can use this attribute with the following SVG elements: <a> <altGlyph>
The SVG element has the tag name svg. It has attributes like width, height, viewBox, and so on. To click the element with svg, we should identify the element then utilize the Actions class. We shall first move to that element with the moveToElement method and then apply the click method on it.
SVG is XML based, which means that every element is available within the SVG DOM. You can attach JavaScript event handlers for an element. In SVG, each drawn shape is remembered as an object. If attributes of an SVG object are changed, the browser can automatically re-render the shape.
Click the left circle (inside the padding) and event. target. nodeName == svg ; click the right circle (in the svg proper) and event.
You don’t even have to put a container around the SVG.
You just need to define a position: relative
to the SVG itself and it solve the click trigger problem.
Here’s an forked Fiddle showing it: http://jsfiddle.net/jpsirois/xnw1tbL7/
Okay, turns out that the first way of creating a SVG creates the onclick
only on the drawn part. That means you can actually do something nice (maybe not useful in your case).
In this fiddle, I created two separate onclick
s, one that triggers when you click specifically the drawing (which i made larger so you can see) and one that triggers when you click on the SVG box, by putting a container around it.
HTML :
<div id="svgContainer">
<svg id="firstSVG" class="s" xmlns="http://www.w3.org/2000/svg">
<circle cx="50" cy="50" r="25" fill="red"/>
</svg>
</div>
JS :
document.getElementById('firstSVG').addEventListener('click', function (event) {
document.getElementById("output").innerHTML = "Click works here too !";
}, false);
document.getElementById('svgContainer').addEventListener('click', function (event) {
document.getElementById("output").innerHTML = "Well, a container seems better.";
}, true);
So basically just use a container around the SVG, or just use the click on the drawing
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With