You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为通过<object>标签引用的外部SVG添加onclick事件?

外部SVG通过<object>引入后点击事件失效的解决方案(保持主文件整洁)

问题背景

我需要为移动端实现点击SVG触发的下拉菜单,SVG存储在独立文件中,通过以下代码引入到页面:

<object type="image/svg+xml" data="./media/svg/moon.svg" id="moon"></object>

但发现onclick事件完全无法生效——因为<object>标签仅负责渲染外部文件,并不会替换自身。我尝试过直接给SVG标签注入onclick属性、插入script标签等方法,均未成功;虽然将SVG代码直接粘贴到主文件中能解决问题,但我希望保持index.html的整洁,继续使用外部SVG文件。

最终可行的JS代码

经过调试,以下是能实现需求的JavaScript代码:

function svgInject(objectId, layerId, attr, val, post) {
    svg = document.getElementById(objectId).contentDocument.getElementById(layerId);
    svg.setAttribute(attr, val)
    script = document.createElement("script");
    script.setAttribute('src', '/js/script.js');
    script.setAttribute('type', 'text/javascript');
    svg.append(script);
    if (post === true) {
        console.log(this.document.getElementById('moonMenu').contentDocument.getElementById('moon'));
    };
};
function menuCheck() {
    toggle = document.getElementById('toggle1');
    console.log(toggle)

    if (toggle.checked === true){toggle.checked = false} else {toggle.checked = true};
};
svgInject('moonMenu', 'moon', 'onclick', 'menuCheck()');

内容的提问来源于stack exchange,提问作者ECLYPSE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 10:55:06