调用mylibray onclick中的函数以传递此内容

时间:2018-07-30 09:47:51

标签: javascript function this

我收到了这个有效的onclick呼叫。

<ul id="ul_name" onclick="javascript:mylibrary.ul_action(this);">

我不想在每个ul上手动添加呼叫,所以我尝试了这个:

window.onload = function() {
   var u = document.querySelectorAll(".myclass ul");
   var i;
   for (i = 0; i < u.length; i++) {
   u[i].onclick = mylibrary.ul_action(this);
   };
};

但是它不起作用。这是范围错误吗?还是什么?谢谢。

1 个答案:

答案 0 :(得分:1)

您正在立即调用该函数,并将返回值分配为您的click事件处理程序。

您需要创建一个新函数,以所需的参数调用现有函数(不是 this,因为您希望它作为元素):

window.onload = function() {

  var mylibrary = {
    ul_action: function(ul) {
      console.log(ul.innerText);
    }
  };

  var u = document.querySelectorAll(".myclass ul");
  var i;
  for (i = 0; i < u.length; i++) {
    u[i].onclick = mylibrary.ul_action.bind(window, u[i]);
  };
};
<main class="myclass">
  <ul>
    <li>One</li>
  </ul>
  <ul>
    <li>Two</li>
  </ul>
</main>