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

将jQuery点击事件代码转为原生JS后失效,求原因及解决方法

原生JS代码失效的原因及修复方案

咱们一步步拆解你代码里的问题,很快就能搞定:

问题1:事件绑定方式错误

在原生JS里,不能像jQuery那样直接用.click(function(){})来绑定点击事件,得用addEventListener方法才行。你原来的写法:

document.getElementById("prime").click(function() {
  myFuction();
});

这完全不符合原生JS的API规范,浏览器根本识别不了这种写法。

问题2:DOM方法拼写错误 + 返回值处理不当

你写的document.getElementByClassName是错的,正确的方法名是document.getElementsByClassName(注意是Elements复数形式)。而且这个方法返回的是一个包含所有匹配元素的HTMLCollection,不是单个元素,直接调用.classList会报错,得遍历这个集合或者指定具体的索引(比如[0],如果你只有一个.prime元素的话)。

问题3:函数名拼写不一致

你绑定事件时调用的是myFuction(),但定义的函数是myFunction()——少了一个字母n,这会导致调用时找不到函数,直接抛出引用错误。


修复后的完整代码

这里是修正后的原生JS代码,完全对应你原来的jQuery逻辑:

document.addEventListener('DOMContentLoaded', function() {
    // 正确绑定点击事件
    document.getElementById("prime").addEventListener('click', function() {
        myFunction();
    });
    
    function myFunction() {
        // 获取所有.prime元素并遍历处理
        const primeElements = document.getElementsByClassName("prime");
        for (let elem of primeElements) {
            elem.classList.toggle("fa-message");
            elem.classList.toggle("fa-xmark");
        }
        // 如果确定只有一个.prime元素,也可以简化成:
        // document.querySelector(".prime").classList.toggle("fa-message");
        // document.querySelector(".prime").classList.toggle("fa-xmark");
    }
});

另外补充个小技巧:用querySelector或者querySelectorAll会更灵活,语法和jQuery的选择器类似,比如document.querySelectorAll(".prime")就能获取所有匹配的元素,用起来更顺手。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 17:06:51