ChatGPT解决这个技术问题 Extra ChatGPT

获取触发事件的元素的 ID

有什么方法可以获取触发事件的元素的 ID?

我在想类似的事情:

$(document).ready(function() { $("a").click(function() { var test = caller.id; alert(test.val()); }); });

当然,如果事件是从第一种形式触发的,则 var test 应该包含 id "aaa",如果事件是从第二种形式触发的,则应包含 "bbb"

你的例子有点奇怪。您将点击事件附加到“a”,但没有任何锚点。将其更改为 $('input.title').click(...) 对于您问题的未来读者来说会更清楚一些。
您可以在事件处理程序中使用 event.target.id 来获取触发事件的元素的 ID。
您可以将 event 作为 单击回调函数中的参数,然后使用 event.target.id

J
Jack Bashford

在 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 抽象得这么好。你摇滚!我认为它仍然会在 (this) 和 (event.target) 之间存在差异——将事件绑定到的对象与接收事件的对象。
不幸的是, event.target 不允许访问其自定义属性。为此,必须使用 $(this).attr("organization:thingy");。
@ZianChoy - 我不太清楚您所说的“自定义属性”是什么意思,但是如果您需要 jQuery 方法,例如 $(event.target).attr("organisation:thingy");,您可以使用 $(event.target)
请注意, event.target 是被点击的真实项目。例如,如果您将单击事件绑定到 div,并且该 div 内部是一个 P 和一个 H2 元素 - event.target 将返回 H2 元素或 P,如果单击其中之一。 “this” 将真正返回您挂起事件的 div,无论您单击了哪个子元素。
我使用 event.currentTarget.id , event.target.id 也可以是子元素
P
Peter Mortensen

供参考,试试这个!有用!

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

@gemma 另一种解决方案对我不起作用,但这个解决方案对我有用。谢谢你迟到。
@dlackey 对我来说也是一样,另一种解决方案在我的 Firefox 12 上不起作用,但这个解决方案可以。谢谢
最佳答案似乎不适用于获取嵌入式 SVG 中元素的 ID。 $(this).attr("id"); 可以。
请记住,如果您的 click 事件发生在具有子元素的元素上,e.target 将为您提供导致事件被触发的确切元素,即使它是一个子元素,而 this 将为您提供该事件的元素附在。
d
dun

尽管在其他帖子中提到过,但我想说明一下:

$(event.target).id 未定义

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

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

this.id 给出 id 属性。

$(this).id 未定义。

当然,区别在于 jQuery 对象和 DOM 对象之间。 “id”是一个 DOM 属性,因此您必须在 DOM 元素对象上才能使用它。

(它绊倒了我,所以它可能绊倒了其他人)


对我来说,event.target.id 什么都没有!
@artaxerxe 这意味着您点击的元素没有 id :P;也不要将 jquery 用于此类事情....使用事件 javascript 属性代替它会更快。
$(event.target).attr('selector'); 非常适合我。
A
Alexander Elgin

对于所有事件,不仅限于您可以使用的 jQuery

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

如果 event.target 失败,它会退回到 IE 的 event.srcElement。澄清上面的代码不需要jQuery,但也适用于jQuery。


不使用 jQuery 意味着运行更少的代码行,同时获得完全相同的结果,如上所示。 jQuery 抽象出 js。这是直接js回答,看大小!
只使用'this'关键字不是更好吗?它总是可以让你访问调用事件的元素的属性?
只需要挖掘所有的 jQuery 废话就可以得到这个答案。谢谢。这比以往任何时候都更重要:needsmorejquery.com
s
sr01853

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

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

您可以在此处了解更多信息:http://remysharp.com/2007/04/12/jquerys-this-demystified/


如果您有像 $(html).click() (this)这样的函数,将返回 html 对象而不是点击的元素
A
Alexander Elgin

我从数据库中动态生成一个表,以 JSON 格式接收数据并将其放入一个表中。每个表格行都有一个唯一的 ID,这是进一步操作所必需的,因此,如果 DOM 被更改,您需要一种不同的方法:

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

哦,是的,这就是我要找的。它也适用于较新的“on”,因为现在不推荐使用“delegate”。我有从数据库数据动态创建的复选框,当然它们都有不同的 ID,我需要在单击时使用它们来执行某些操作。我在这里使用了这个方法来获取实际点击了哪个 ID。在老式 JS 中,我只是从复选框的 HTML 中的每个复选框传递了 id,但不能使用 jQuery 事件处理程序模型这样做。
M
Maciej Sikora

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

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/ 中阅读


C
Cerbrus

应通过以下方式获取作为 jQuery 对象的源元素

var $el = $(event.target);

这将为您提供点击的来源,而不是点击功能也被分配的元素。当点击事件在父对象 EG 上时很有用。表格行上的点击事件,并且您需要被点击的单元格

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

C
Cris

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

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

D
Darius

您可以尝试使用:

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

B
Basant Rules

使用可以使用 .on 事件

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

I
Isochronous

在委托事件处理程序的情况下,您可能会遇到这样的情况:

<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() 方法对于验证您的事件目标(除其他外)是否确实是您所需要的非常宝贵。使用 .closest(selector) 向上搜索 DOM 树,并使用 .find(selector)(通常与 .first() 结合,如 .find(selector).first())向下搜索。使用 .closest() 时不需要使用 .first(),因为它只返回第一个匹配的祖先元素,而 .find() 返回所有匹配的后代。


有用!我在我的情况下进行了调整,因为我只有一个简单的
  • ,所以我使用了 itemId = $target.attr('id')。
  • 请注意使用简单的 ID 属性,因为每个 ID 在该页面上都必须是唯一的。因此,如果您出于某种原因需要在该页面上有两个这样的列表,您可能会得到重复的 ID,这是一件坏事。这就是为什么我倾向于总是使用 data-id 来应对未来。
    A
    Alexander Elgin

    这适用于比上述答案中提到的事件参数更高的 z-index

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

    这样,您将始终获得(在本例中为 li)元素的 id。同样,当单击父级的子元素时..


    h
    honk
    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 here


    我认为这有点像使其工作的过时选项
    @ArnasPečelis 过时了吗?不,只是不是 jQuery。
    E
    Error404

    只需使用 this 参考

    $(this).attr("id")
    

    或者

    $(this).prop("id")
    

    这将从已分配 click() 的元素中获取属性 id。如果您需要将更多数据传输到该方法,则需要 data-some-id="<?php $someId; ?>" 然后您可以 `$(this).data("some-id") 来检索它。
    b
    barbsan
    $(".classobj").click(function(e){
        console.log(e.currentTarget.id);
    })
    

    @ManuelMannhardt 此答案中没有链接,这是仅代码的答案,而不是仅链接的答案
    A
    Angel Politis

    this.element.attr("id") 在 IE8 中运行良好。


    M
    Moji

    这两项工作,

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

    alert(this.id);
    

    K
    Kamil Kiełczewski

    纯JS更简单

    aaa.onclick = handler;
    bbb.onclick = handler;
    
    function handler() { 
      var test = this.id; 
      console.log(test) 
    }
    

    aaa.onclick = 处理程序; bbb.onclick = 处理程序;函数 handler() { var test = this.id; console.log(test) }


    x
    xeon

    您可以使用该函数获取更改项目的 id 和值(在我的示例中,我使用了 Select 标签。

                  $('select').change(
                       function() {
                            var val = this.value;
                            var id = jQuery(this).attr("id");
                            console.log("value changed" + String(val)+String(id));
                       }
                   );
    

    D
    DAB

    我正在与

    jQuery 自动完成

    如上所述,我尝试查找 event,但是当请求函数触发时,它似乎不可用。我使用 this.element.attr("id") 来获取元素的 ID,它似乎工作正常。


    D
    David Dehghan

    在 Angular 7.x 的情况下,您可以获得本机元素及其 id 或属性。

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

    html:

    <div class="list-item" (click)="myClickHandler($event)">...</div>
    

    v
    vr_driver

    已经有很多方法可以做到这一点和示例,但是如果您需要更进一步并且需要防止表单上的输入键,但仍然需要在多行文本区域中使用它,它会变得更加复杂。以下将解决问题。

    <script>
        $(document).ready(function() {
          $(window).keydown(function(event){
            if(event.keyCode == 13) {
               //There are 2 textarea forms that need the enter key to work.
                if((event.target.id=="CommentsForOnAir") || (event.target.id=="CommentsForOnline"))
                {
                    // Prevent the form from triggering, but allowing multi-line to still work.
                }
                else
                {
                    event.preventDefault();
                    return false;
                }         
            }
          });
        });
    </script>
    
    <textarea class="form-control" rows="10" cols="50" id="CommentsForOnline" name="CommentsForOnline" type="text" size="60" maxlength="2000"></textarea>
    

    它可能会更简化,但你明白了这个概念。


    单=在if?