获取触发事件的元素的ID

有什么办法来获取触发事件的元素的ID?

我在想:

<html> <head> <script type="text/javascript" src="starterkit/jquery.js"></script> <script type="text/javascript"> $(document).ready(function () { $("a").click(function () { var test = caller.id; alert(test.val()); }); }); </script> </head> <body> <form class="item" id="aaa"> <input class="title"></input> </form> <form class="item" id="bbb"> <input class="title"></input> </form> </body> </html> 

除非var test应该包含id "aaa" ,如果事件是从第一个表单触发的,而"bbb"则是从第二个表单触发。

在jQuery中, event.target总是引用触发事件的元素,其中'event'是传递给函数的参数。 http://api.jquery.com/category/events/event-object/

 $(document).ready(function() { $("a").click(function(event) { alert(event.target.id); }); }); 

还要注意'this'也可以,但是它不是一个jQuery对象,所以如果你想在它上面使用jQuery函数,那么你必须把它称为'$(this)' ,例如:

 $(document).ready(function() { $("a").click(function(event) { // this.append wouldn't work $(this).append(" Clicked"); }); }); 

作为参考,试试这个! 有用!

 jQuery("classNameofDiv").click(function() { var contentPanelId = jQuery(this).attr("id"); alert(contentPanelId); }); 

虽然在其他文章中提到过,但是我想拼出来:

$(event.target).id是未定义的

$(event.target)[0].id给出id属性。

event.target.id也给出了id属性。

this.id给出了id属性。

$(this).id是未定义的。

当然,不同之处在于jQuery对象和DOM对象之间。 “id”是一个DOM函数,所以你必须在DOM元素对象上来使用它。

(它使我绊倒了,所以它可能绊倒别人)

对于所有的事件,不仅限于只能使用jQuery

 var target = event.target || event.srcElement; var id = target.id 

event.target失败的地方,它回event.srcElement IE的event.srcElement 。 澄清上面的代码不需要jQuery,但也适用于jQuery。

您可以使用(this)引用激发函数的对象。

'this'是一个DOM元素,当你在一个callback函数内(在jQuery的上下文中),例如,被click,each,bind等方法调用。

这里是你可以学习更多的地方: http : //remysharp.com/2007/04/12/jquerys-this-demystified/

我dynamic地从数据库中生成一个表,接收JSON中的数据并把它放到一个表中。 每个表格行都有一个唯一的ID ,这是进一步操作所需要的,所以如果DOM被改变了,你需要一个不同的方法:

 $("table").delegate("tr", "click", function() { var id=$(this).attr('id'); alert("ID:"+id); }); 

作为jQuery对象的源元素应该通过获取

 var $el = $(event.target); 

这将使您获得点击的来源,而不是点击function所分配的元素。 当点击事件位于父对象EG.a时,在表格行的单击事件上,您需要点击的单元格

 $("tr").click(function(event){ var $td = $(event.target); }); 

事件属性中发射事件的元素

 event.currentTarget 

我们获取设置了事件处理程序的DOM节点对象。


大部分嵌套节点开始冒泡进程了

 event.target 

事件对象始终是事件处理程序的第一个属性,例如:

 document.querySelector("someSelector").addEventListener(function(event){ console.log(event.target); console.log(event.currentTarget); }); 

关于事件代表团的更多信息你可以阅读http://maciejsikora.com/standard-events-vs-event-delegation/

你可以尝试使用:

 $('*').live('click', function() { console.log(this.id); return false; }); 

在委托事件处理程序的情况下,你可能有这样的事情:

 <ul> <li data-id="1"> <span>Item 1</span> </li> <li data-id="2"> <span>Item 2</span> </li> <li data-id="3"> <span>Item 3</span> </li> <li data-id="4"> <span>Item 4</span> </li> <li data-id="5"> <span>Item 5</span> </li> </ul> 

和你的JS代码是这样的:

 $(document).ready(function() { $('ul').on('click li', function(event) { var $target = $(event.target), itemId = $target.data('id'); //do something with itemId }); }); 

您很可能会发现itemId是undefined ,因为LI的内容被包裹在<span> ,这意味着<span>可能是事件目标。 你可以用一个小检查来解决这个问题,就像这样:

 $(document).ready(function() { $('ul').on('click li', function(event) { var $target = $(event.target).is('li') ? $(event.target) : $(event.target).closest('li'), itemId = $target.data('id'); //do something with itemId }); }); 

或者,如果您希望最大限度地提高可读性(并避免不必要的重复jQuery包装调用):

 $(document).ready(function() { $('ul').on('click li', function(event) { var $target = $(event.target), itemId; $target = $target.is('li') ? $target : $target.closest('li'); itemId = $target.data('id'); //do something with itemId }); }); 

使用事件委托时, .is()方法对于validation您的事件目标(除其他事项)实际上是您所需要的是非常有用的。 使用.closest(selector)searchDOM树,并使用.find(selector) (通常与.find(selector)相结合,就像.find(selector).first() )一样search它。 使用.closest() ,不需要使用.closest() ,因为它只返回第一个匹配的祖先元素,而.find()返回所有匹配的后代。

这在比上面的答案中提到的事件参数更高的z-index上工作:

 $("#mydiv li").click(function(){ ClickedElement = this.id; alert(ClickedElement); }); 

这样你总是会得到(在这个例子li )元素的id 。 另外,当点击父级的子元素时

使用可以使用.on事件

  $("table").on("tr", "click", function() { var id=$(this).attr('id'); alert("ID:"+id); }); 
 var buttons = document.getElementsByTagName('button'); var buttonsLength = buttons.length; for (var i = 0; i < buttonsLength; i++){ buttons[i].addEventListener('click', clickResponse, false); }; function clickResponse(){ // do something based on button selection here... alert(this.id); } 

在这里工作JSFiddle。

this.element.attr("id")在IE8中正常工作。

这两个工作,

 jQuery(this).attr("id"); 

 alert(this.id); 

只要使用this参考

 $(this).attr("id") 

要么

 $(this).prop("id")