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

我在想:

$(document).ready(function() { $(“a”).click(function() { VaR 测试 = caller.id; alert(test.val()); }); }); <script type=“text/javascript” src=“starterkit/jquery.js”></script> <表单类=“项目” id=“aaa”> <输入类=“标题”></input> </form> <表单类=“项目” id=“bb”> <输入类=“标题”></input> </form>

当然,除了var测试应该包含id“aaa”(如果事件是从第一个表单触发)和“bbb”(如果事件是从第二个表单触发)。


当前回答

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

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

其他回答

你可以试着用:

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

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

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/

使用可以使用.on事件

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

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

$("#mydiv li").click(function(){

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

通过这种方式,您将始终获得元素(在本例中为li)的id。此外,当单击父元素的子元素..

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

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