在javascript创建一个div,当触发onclick事件时调用一个方法,参数是这个div,代码怎么写

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在javascript创建一个div,当触发onclick事件时调用一个方法,参数是这个div,代码怎么写相关的知识,希望对你有一定的参考价值。

function myFun()for(var i = 0; i < 100; i++)var myDiv = document.createElement("div");myDiv.onclick=function()alert(this);

; //实现点击myDiv,获得当前点击的Div. this就是该div
<body onload="myFun();)>
参考技术A <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns=" http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<script type="text/javascript">
function createDiv()

document.body.innerHTML="<div style='width:100px; height:100px; border:1px solid red;'>这是新创建的DIV</div>";

</script>
</head><body>
<input type="button" onclick="createDiv();" value="创建DIV"/>
</body>
</html>

Javascript:除非元素附加到 document.body,否则事件不会触发

【中文标题】Javascript:除非元素附加到 document.body,否则事件不会触发【英文标题】:Javascript: Event does not fire unless element appended to document.body 【发布时间】:2010-09-27 12:45:55 【问题描述】:

我在 javascript 中动态创建一个元素 (div),并在其上注册一个事件监听器:

var tooltip = document.createElement('div');
tooltip.onclick = function()  alert('hello');  

现在,如果我将此元素附加到文档正文:

document.body.appendChild(tooltip);

一切正常,事件被捕获。但是(出于定位目的)我想将此元素附加到页面中的(静态)子元素,例如:

document.getElementById('id').appendChild(tooltip);

并且元素已正确生成和定位 - 但现在不再捕获 onclick 事件。有什么想法吗?这是 x 浏览器,所以我一定错过了什么。

谢谢,唐。

【问题讨论】:

【参考方案1】:

您创建的不仅是一个,而是许多 div。 试试这个(我希望你不介意,但我也修复了 HTML 和 CSS):

<html>
<head>

<script type="text/javascript">

function makeDiv() 
    if(!document.getElementById('tooltipDiv'))
        var tooltip = document.createElement('div');

        tooltip.id = "tooltipDiv";
        // Give our tooltip a size and colour so we can see it
        tooltip.style.height = '200px';
        tooltip.style.position = 'absolute';
        tooltip.style.width = '200px';
        tooltip.style.backgroundColor = '#eee';

        // Register onclick listener
        tooltip.onclick = function()  alert('hello'); 
        //tooltip.addEventListener("click", function() alert('hello'); , false);

        // *** Comment one of these out: ***

        //document.body.appendChild(tooltip);
        document.getElementById('myDiv').appendChild(tooltip);
    


</script>
</head>

<body>


<div id="myDiv" 
     onmouseover="makeDiv();" 
     style="position: relative; top: 100px; left: 100px; border: 1px solid red; width: 200px;">

<span>my div text</span>

</div>

</body>
</html>

【讨论】:

更新:是的,因为 tooltip 是 'myDiv' 的子级,它也会触发鼠标悬停。【参考方案2】:

也许你需要在追加后注册事件处理程序?

【讨论】:

嗨 - 是的,不幸的是似乎没有任何区别【参考方案3】:

您的代码在 Firefox 3.0.5 和 IE7 上运行良好。你确定你的例子是正确的吗?

【讨论】:

啊,你打败了我。我已经在 FF4、IE7、Opera 7 和 Chrome 中进行了测试,并且可以正常工作。 OP可以发布一个完整的例子吗?肯定还有其他问题。 嗨 - 好的,我在下面发布了我的代码(作为答案),你会发现它只适用于 document.body。【参考方案4】:

好的,这是我的代码,抱歉耽搁了。下面发布了一个带有解决方法的版本:

<html>
<head>

<script type="text/javascript">

function makeDiv() 
  var tooltip = document.createElement('div');

  // Give our tooltip a size and colour so we can see it
  tooltip.style.height = '200px';
  tooltip.style.position = 'absolute';
  tooltip.style.width = '200px';
  tooltip.style.backgroundColor = '#eee';

  // Register onclick listener
  tooltip.onclick = function()  alert('hello'); 

  // *** Comment one of these out: ***

  //document.body.appendChild(tooltip);
  document.getElementById('myDiv').appendChild(tooltip);


</script>
</head>

<body>


<div id="myDiv" 
     onmouseover="makeDiv();" 
     style="position: relative; top: 100px; left; 100px; border: 1px solid red; width: 200px;">

<span>my div text</span>

</div>

</body>
</html>

==================================== 好的 - 所以这有效:

<html>
<head>

<script type="text/javascript">

function makeDiv() 
  var tooltip = document.createElement('div');

  // Give our tooltip a size and colour so we can see it
  tooltip.style.height = '200px';
  tooltip.style.position = 'absolute';
  tooltip.style.width = '200px';
  tooltip.style.backgroundColor = '#eee';

  // Register onclick listener
  tooltip.onclick = function()  alert('hello'); 

  // *** Comment one of these out: ***

  //document.body.appendChild(tooltip);
  document.getElementById('container').appendChild(tooltip);


</script>
</head>

<body>

<div id="container" style="border: 1px solid blue; float: left; ">
  <div id="myDiv" 
       onmouseover="makeDiv();" 
       style="position: relative; border: 1px solid red; width: 200px;">

       <span>my div text</span>
  </div>
</div>

</body>
</html>

【讨论】:

问题在FF3、IE7和Chrome中存在,但在Opera中有效。 对不起我之前的评论(我现在删除了)。我有点着急。我想我可以在我的电脑上复制你的问题。我看看我能不能回答这个问题。 好的,我想我有一个解决方法,我会将它添加到我的“答案”的底部,以便您查看(以后我将简单地编辑我的原始帖子;))。问题似乎是由于“myDiv”是触发创建“工具提示”的元素和附加工具提示的元素。【参考方案5】:

这里是一些删除 onmouseout 工具提示的代码。

在创建工具提示时给它一个 ID:

toolTip.setAttribute('id','toolTip');

然后是onmouseout

function removeDiv(container) 
    var toolTip = document.getElementById('toolTip');
    document.getElementById(container).removeChild(toolTip);

【讨论】:

以上是关于在javascript创建一个div,当触发onclick事件时调用一个方法,参数是这个div,代码怎么写的主要内容,如果未能解决你的问题,请参考以下文章

用事件冒泡实现在div内点击,不触发事件,当在div外点击时才触发事件

如何通过单击隐藏在 JavaScript 中的 div 来触发函数?

关于uniapp的事件监听,使用uni.$once和uni.$on导致的重复监听

在Ajax调用之后重新触发Jquery脚本

请帮我写一段JS代码,当滚动到页面距离底部100px的时候触发点击#div1?

动态创建元素后如何绑定到元素