开发者问题收集

出现未捕获的类型错误但链接工作正常

2020-04-20
343

虽然有一些类似的问题,但我读过它,但无法解决我的问题。 希望有人对此有所启发,以便不仅帮助我,也帮助其他人。

我已通过 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>
3个回答

我认为是

window.location.href = 'https://somedomain.com'
sathish1409
2020-04-20

尝试一下这个,

如果你确定你的 html 源包含 id="hercule" 的元素。那么你可以尝试

window.onload = function () {
    document.getElementById('hercule').addEventListener('click', function() {
        location.href = 'https://somedomain.com'
        // alert("clicked div");
    }, false);
};

确保你所有的 onload 过程都写在一个地方。否则浏览器将保留并仅执行最后找到的 window.onload 函数。

Vipin
2020-04-20

您的这段代码:

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>
terrymorse
2020-04-20