Pure Js onclick元素不起作用

时间:2016-07-06 13:10:01

标签: javascript

我在使用greasemonkey运行此代码时遇到问题,最后一个位置是工作和运行功能。

var arry = [];
arry = GM_listValues();
for ( var i = 0; i < arry.length; i++) {  
    document.getElementById('moje_menu').innerHTML = document.getElementById('moje_menu').innerHTML + '<p id="' + arry[i] + '">' + arry[i] + '</p>';
    document.getElementById(arry[i]).onclick = delete;
}

在10位置上最后一次工作......为什么????

2 个答案:

答案 0 :(得分:2)

当你替换innerHTML时,你删除所有以前的事件处理程序。

在普通JS中,您可以检测div中的点击,但需要检查事件

&#13;
&#13;
function removeP(p) {
  console.log(p.id);
}  
var arry = ["a","b","c"];
window.onload=function() {
  for ( var i = 0; i < arry.length; i++) {  
    document.getElementById('moje_menu').innerHTML += '<p id="' + arry[i] + '">' + arry[i] + '</p>';
  }
  document.getElementById('moje_menu').onclick=function(e) {
    var event = e?e:window.event,tgt = event.target || event.srcElement;
    if (tgt.tagName.toLowerCase()=="p") {
      console.log(tgt.id);
    }
  }
}  
&#13;
<div id="moje_menu"></div>
&#13;
&#13;
&#13;

备选是内联的,因为您无论如何都会生成P

var arry = [];
arry = GM_listValues();
for ( var i = 0; i < arry.length; i++) {  
    document.getElementById('moje_menu').innerHTML += '<p id="' + arry[i] + '" onclick="delete(this)">' + arry[i] + '</p>';
}

您可以修改删除(因为删除是内置方法,函数的名称不好)来处理传递的段落

示例:

&#13;
&#13;
function removeP(p) {
  console.log(p.id);
}  
var arry = ["a","b","c"];
for ( var i = 0; i < arry.length; i++) {  
  document.getElementById('moje_menu').innerHTML += '<p id="' + arry[i] + '" onclick="removeP(this)">' + arry[i] + '</p>';
}
&#13;
<div id="moje_menu"></div>
&#13;
&#13;
&#13;

在jQuery中,您可以轻松委派:

&#13;
&#13;
function removeP() {
  console.log(this.id);
}  
$(function() {
  
  var arry = ["a","b","c"];
  var $menu = $('#moje_menu');
  for (var i=0; i<arry.length; i++) {  
    $menu.append($('<p/>',{"id":arry[i], "text":arry[i]}))
  }
  $menu.on("click","p",removeP);
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="moje_menu"></div>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

这是我的解决方案,我不喜欢他们,但有效。

mix run priv/repo/users.list.exs