获取触发事件的元素的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")