关于javascript:获取触发事件的元素的ID

关于javascript:获取触发事件的元素的ID

Getting the ID of the element that fired an event

是否有任何方法可以获取触发事件的元素的ID?

我在想:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<html>
  <head>
    <script type="text/javascript" src="starterkit/jquery.js">
    <script type="text/javascript">
      $(document).ready(function () {
        $("a").click(function () {
          var test = caller.id;
          alert(test.val());
        });
      });
   
  </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",如果事件是从第一个窗体激发的,则包含id "aaa";如果事件是从第二个窗体激发的,则包含"bbb"


在jquery中,event.target总是指触发事件的元素,其中event是传递给函数的参数。http://api.jquery.com/category/events/event-object(类别/事件/事件对象)/

1
2
3
4
5
$(document).ready(function() {
    $("a").click(function(event) {
        alert(event.target.id);
    });
});

还要注意,this也可以工作,但它不是jquery对象,因此如果您希望对其使用jquery函数,则必须将其称为$(this),例如:

1
2
3
4
5
6
$(document).ready(function() {
    $("a").click(function(event) {
        // this.append wouldn't work
        $(this).append(" Clicked");
    });
});

作为参考,试试这个!它起作用了!

1
2
3
4
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

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

event.target失败时,它就落在event.srcElement上。为了澄清上述代码,不需要jquery,但也可以与jquery一起使用。


您可以使用(this)引用启动函数的对象。

当您在回调函数(jquery的上下文中)内时,'this'是一个dom元素,例如,由click、each、bind等方法调用。

以下是您可以了解更多信息的地方:http://remysharp.com/2007/04/12/jquerys-this-demystalized/


我动态地生成一个数据库中的表,接收JSON中的数据并将其放入一个表中。每个表行都有一个唯一的ID,这是进一步操作所必需的,因此,如果修改了DOM,则需要使用不同的方法:

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

在事件属性中激发事件的元素

1
event.currentTarget

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

开始冒泡过程的大多数嵌套节点

1
event.target

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

1
2
3
4
5
6
document.querySelector("someSelector").addEventListener(function(event){

 console.log(event.target);
 console.log(event.currentTarget);

});

有关事件委派的详细信息,请访问http://maciejsikora.com/standard-events-vs-event-delegation。/


作为jquery对象的源元素应该通过

1
var $el = $(event.target);

这将使您获得单击的源,而不是为单击函数分配的元素。当Click事件位于父对象上时非常有用例如,表行上的单击事件,您需要单击的单元格

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

您可以尝试使用:

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


在委托事件处理程序的情况下,您可能会有如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<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代码是这样的:

1
2
3
4
5
6
7
8
$(document).ready(function() {
    $('ul').on('click li', function(event) {
        var $target = $(event.target),
            itemId = $target.data('id');

        //do something with itemId
    });
});

您很可能会发现itemID是undefined,因为li的内容被包装在中,这意味着可能是事件目标。你可以用一张小支票来解决这个问题,比如:

1
2
3
4
5
6
7
8
$(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包装调用重复):

1
2
3
4
5
6
7
8
9
10
11
$(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()方法对于验证您的事件目标(以及其他事情)是否确实是您所需要的,是非常有价值的。使用.closest(selector)向上搜索dom树,使用.find(selector)(一般与.first()结合,如.find(selector).first()中)向下搜索。使用.closest()时不需要使用.first(),因为它只返回第一个匹配的祖先元素,而.find()返回所有匹配的后代。


使用可以在事件中使用.

1
2
3
4
  $("table").on("tr","click", function() {
                    var id=$(this).attr('id');
                    alert("ID:"+id);  
                });

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

1
2
3
4
5
$("#mydiv li").click(function(){

    ClickedElement = this.id;
    alert(ClickedElement);
});

这样,您将始终获得(在本例中为li元素)的ID。也可以单击父元素的子元素。


1
2
3
4
5
6
7
8
9
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);
}

在这里工作。


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


只需使用this参考

1
$(this).attr("id")

1
$(this).prop("id")

这两项工作,

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

1
alert(this.id);

您可以使用函数获取更改项的ID和值(在我的示例中,我使用了一个select标记)。

1
2
3
4
5
6
7
              $('select').change(
                   function() {
                        var val = this.value;
                        var id = jQuery(this).attr("id");
                        console.log("value changed" + String(val)+String(id));
                   }
               );

这适用于大多数类型的元素:

1
2
3
$('selector').on('click',function(e){
    log(event.currentTarget.id);
    });

对于角7.x,可以获取本机元素及其ID或属性。

1
2
3
4
5
myClickHandler($event) {
    this.selectedElement = <Element>$event.target;
    console.log(this.selectedElement.id)
    this.selectedElement.classList.remove('some-class');
}

HTML:

1
...


我正在和

jQuery Autocomplete

我试着像上面描述的那样寻找一个event,但是当请求函数触发时,它似乎不可用。我用EDOCX1[1]来获取元素的ID,它看起来工作得很好。


推荐阅读

    linux使用命令的方法?

    linux使用命令的方法?,系统,信息,工具,标准,数据,命令,左下角,目录,文件夹,

    linux上获取网管命令?

    linux上获取网管命令?,地址,系统,网络,信息,电脑,服务,网关,状态,名字,中心,l

    linux命令行获取ip?

    linux命令行获取ip?,地址,系统,代码,信息,电脑,服务,状态,密码,命令,网卡,【L

    linux命令获取主机名?

    linux命令获取主机名?,工作,地址,管理,系统,信息,命令,目录,软件,代码,策略,L

    linux获取网速命令?

    linux获取网速命令?,网络,工具,软件,地址,设备,5G,名称,工作,通讯,分析,linux

    linux命令获取时分秒?

    linux命令获取时分秒?,时间,系统,体系,标准,命令,工具,管理,国家,大陆,信息,l

    linux命令获取机器码?

    linux命令获取机器码?,地址,设备,工作,信息,命令,管理,系统,工具,目录,网络,l

    linux获取用户名命令?

    linux获取用户名命令?,系统,密码,信息,地址,名称,代码,命令,用户名,用户,用

    linux获取时间戳命令?

    linux获取时间戳命令?,时间,地址,工作,系统,数字,连续,信息,命令,管理,位置,l

    linux获取目录命令行?

    linux获取目录命令行?,工作,系统,地址,信息,数据,命令,标准,名称,环境,位置,l

    linux的获取ip命令?

    linux的获取ip命令?,地址,网络,系统,信息,设备,终端,技术,命令,数字,名称,lin

    linux只获取ip命令?

    linux只获取ip命令?,地址,网络,系统,信息,设备,数字,终端,命令,电脑,技术指

    linux命令行获取公网?

    linux命令行获取公网?,地址,网络,信息,系统,电脑,命令,终端,状态,名称,通信,

    linux命令输入方法?

    linux命令输入方法?,系统,电脑,密码,管理,地址,命令,网站,工具,首开,位置,lin

    linux如何获取命令行?

    linux如何获取命令行?,系统,工具,密码,信息,软件,命令,终端,位置,管理,发行,

    linux命令获取进程号?

    linux命令获取进程号?,网络,系统,情况,信息,工具,设备,状态,软件,进程,实时,l

    linux的hz获取命令?

    linux的hz获取命令?,系统,工作,管理,基础,信息,地址,状态,时间,网络,命令,别

    linux获取命令行结果?

    linux获取命令行结果?,系统,信息,工作,地址,设备,命令,软件,环境,目录,文件,L

    获取linux命令回显?

    获取linux命令回显?,系统,工具,底部,命令,设备,时间,信息,环境,电脑,标准,Lin