出现未捕获的类型错误但链接工作正常
虽然有一些类似的问题,但我读过它,但无法解决我的问题。 希望有人对此有所启发,以便不仅帮助我,也帮助其他人。
我已通过 functions.php 将 JS 文件添加到我的子主题 (wordpress),然后将事件侦听器添加到 ID。
问题出在 custom.js?ver=5.4:1 上的 :Uncaught TypeError: Cannot read property 'addEventListener' of null
虽然当我单击对象时它会正确转到链接,但错误显示在控制台上。
在 functions.php 上,我添加了:
function my_customm_scripts() { wp_enqueue_script( 'custom-js', get_stylesheet_directory_uri() . '/custom.js', array( 'jquery' ),'',true ); } add_action( 'wp_enqueue_scripts', 'my_customm_scripts' );
在我的 custom.js 中我添加了:
document.getElementById('hercule').addEventListener('click', function() {
location.href = 'https://somedomain.com'
}, false);
我确信它很简单,但我检查了很多解决方案都没有成功 感谢您的时间 J.
<div class="hoverfora wpb_animate_when_almost_visible wpb_slideInUp slideInUp wpb_column vc_column_container vc_col-sm-4 wpb_start_animation animated" id="hercule">
<div class="vc_column-inner vc_custom_1587337223984">
<div class="wpb_wrapper">
<div class="service_table_holder">
<ul class="service_table_inner">
<li class="service_table_title_holder background_color_type" style="">
<div class="service_table_title_inner">
<div class="service_table_title_inner2">
<h3 class="service_title" style="">Web design</h3>
<i class="qode_icon_font_awesome fa fa-desktop fa-3x" style="color: #efcd21 !important;"></i>
</div>
</div>
</li>
<li class="service_table_content" style="">Development de websites .
<p></p>
</li>
</ul>
</div>
</div>
</div>
</div>
我认为是
window.location.href = 'https://somedomain.com'
尝试一下这个,
如果你确定你的 html 源包含 id="hercule" 的元素。那么你可以尝试
window.onload = function () {
document.getElementById('hercule').addEventListener('click', function() {
location.href = 'https://somedomain.com'
// alert("clicked div");
}, false);
};
确保你所有的 onload 过程都写在一个地方。否则浏览器将保留并仅执行最后找到的 window.onload 函数。
您的这段代码:
document.getElementById('hercule')
正在寻找带有
id="hercule"
的 DOM 元素。显然,在运行
custom.js
时,您的页面不包含这样的元素,因此
document.getElementById('hercule')
返回 null,然后在对 null 对象调用
addEventListener
方法时会引发 TypeError。
在您的 HTML 页面上查找包含
id="hercule"
的元素。如果找不到它,则表明您的问题已确定。
编辑:
后续信息显示,custom.js JavaScript 正在尝试访问 id="hercule" 尚未存在的 div。解决方案是延迟自定义函数的启动,直到 div 存在为止。
通常,等待窗口的
load
事件就足够了,但在这种情况下,尚不清楚这是否可行,因为“hercule”可能是由另一个 JavaScript 函数生成的,而该函数在
load
事件时不会完成。
一种解决方案就是继续寻找“hercule”,直到找到它为止:
// USE THIS SECTION IN YOUR CODE:
// keep looking for "hercule"
function lookForHercule() {
const hercule = document.getElementById('hercule');
if (hercule) {
// add the 'click' listener to 'hercule'
hercule.addEventListener('click', function() {
hercule.innerHTML = "You clicked hercule, redirecting to somedomain.com";
location.href = 'https://somedomain.com'
}, false);
return;
}
console.log('"hercule" not found');
setTimeout(lookForHercule, 2000);
}
// start looking
lookForHercule();
// END OF SECTION TO USE IN YOUR CODE
// THE CODE BELOW IS FOR THIS DEMO ONLY, DO NOT USE IN YOUR CODE:
// FOR DEMO ONLY:
// add 'hercule' after 10 seconds to simulate delay
setTimeout(() => {
const wrapper = document.getElementById('wrapper');
const hercule = document.createElement('div');
hercule.id = 'hercule';
hercule.innerHTML = "I am hercule. Clicking me will redirect to somedomain.com";
wrapper.appendChild(hercule);
}, 10000);
/* this will change cursor to finger when hovering over hercule */
#hercule:hover {
cursor: pointer;
}
<div id="wrapper">
<h4>Search for 'hercule'</h4>
</div>