如何获取单击的元素?

Sas*_*ant 4 html javascript jquery

我的html中有一个简单的div如下:

<div id="myDiv">
....

</div>
Run Code Online (Sandbox Code Playgroud)

此外,我已将onlick事件设置window.click如下:

window.onclick = function()
{
    // do something
 }  
Run Code Online (Sandbox Code Playgroud)

所以,如果我点击div中的任何地方,我怎么才能发现这个点击是在"myDiv"中进行的

注意:我无法在div上添加click事件,它是从jqgrid随机生成的

ren*_*kre 5

$(document).on("click","#myDiv", function (event) {
     alert(event.target.id);
});
Run Code Online (Sandbox Code Playgroud)

  • `alert(this.id);`有点短. (3认同)

Gon*_*ing 3

问题的目的很简单。“我想知道何时单击动态添加的 div”。当您看到动态添加的那一刻,请考虑委托事件!:)

由于这个问题允许使用 jQuery,因此对于这种情况的答案@erkaner接近理想。我只是想解释为什么它是合适的解决方案

$(document).on("click","#myDiv", function (event) {
     // Do something
});
Run Code Online (Sandbox Code Playgroud)

解释:

  • 这使用了 jQuery委托事件处理程序。事件处理被“委托”给预期目标的不变祖先,因此得名。
  • 所选择的祖先就是document这种情况。
  • 您应该使用距离目标最近的不变祖先,但document如果没有其他更接近/方便的情况,则这是最佳默认值。
  • 警告:不要用于body委托事件,因为它有一个错误(样式可能会导致它无法获得冒泡的鼠标事件)。
  • 事件(click在本例中)冒泡到处理程序元素(即文档)。
  • 然后jQuery 选择器(在本例中#myDiv)仅应用于气泡链中的元素。这是非常有效的。
  • 然后,所提供的处理程序函数将仅应用于引发该事件的任何匹配元素。

所有这一切的结果是该元素在事件发生之前不需要存在(在事件注册时它不需要存在)。

此外,由于委托通常用于鼠标事件(而不是每秒 50,000 次),因此与“原始”事件处理程序之间的任何速度差异都可以忽略不计。其好处远远超过任何微小的速度差异。

关于其他onclick=答案

  • 首先,使用单个window.onclick属性是一个坏主意,因为您会停止使用它的任何其他内容(并不是任何使用 jQuery 的人都应该使用它)。
  • onclick其次,并非所有浏览器都提供传递给的事件参数(这应该足以阻止任何人使用它)。有一些解决方法,但创建 jQuery 是为了避免浏览器解决方法:)

笔记:

如果命名不在你的控制之下,你只需要一些匹配的东西。最坏的情况,它可能就像“匹配任何表格下的任何 div”一样简单,但这取决于您的特定 HTML 和代码:

$(document).on("click","table div", function (event) {
     // Do something
});
Run Code Online (Sandbox Code Playgroud)

这是一个实际的例子:

http://jsfiddle.net/TrueBlueAussie/eyo5Lnsy/