click未检测到元素的存在

时间:2018-05-31 23:32:11

标签: javascript mutation-observers

您好,

我需要javascript来点击一个html元素,但它不会立即显示在dom中,所以我有这个代码:

document.addEventListener("DOMContentLoaded", function(event) {
  // Select the node that will be observed for mutations
  var parentOfMyList = document.body;

  // Options for the observer (which mutations to observe)
  var config = {
    attributes: true,
    childList: true,
    subtree: true
  };

  // Callback function to execute when mutations are observed
  var callback = function(mutationsList) {
    for (var mutation of mutationsList) {
      if (mutation.type == 'childList') {
        var elt = document.getElementById("topcmm-123flashchat-main-toolbar-message-type-option");
        if (elt) {
            setTimeout(document.getElementById("topcmm-123flashchat-main-toolbar-message-type-option").click, 6000);

          observer.disconnect();
        }
      }
    }
  };

  // Create an observer instance linked to the callback function
  var observer = new MutationObserver(callback);
  observer.observe(parentOfMyList, config);
});

但我收到'click' called on an object that does not implement interface HTMLElement的错误消息。这是为什么?执行click()时,该元素应该是THERE(我甚至给它一个6秒的开头追赶)。

谢谢。

1 个答案:

答案 0 :(得分:1)

这与变异观察者无关。元素在那里,但您没有在其上调用click()方法。由于您没有将方法绑定到元素,因此会在window上调用它。

传递一个在元素上调用它的匿名函数:

setTimeout(function() {
    elt.click();
}, 6000);

或者您可以将方法绑定到元素:

setTimeout(elt.click.bind(elt), 6000);