有什么方法可以获取触发事件的元素的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”(如果事件是从第二个表单触发)。


当前回答

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

<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()则返回所有匹配的后代元素。

其他回答

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

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

已经有很多方法和示例可以做到这一点,但如果您需要更进一步,需要防止在表单上使用enter键,但仍然需要在多行文本区域上使用它,那么就变得更加复杂了。下面的方法可以解决这个问题。

<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>

它可能可以更简化,但你知道这个概念。

这两项工作,

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

and

alert(this.id);

和我一起工作

jQuery自动完成

我尝试寻找如上所述的事件,但当请求函数触发时,它似乎不可用。我使用this.element.attr(“id”)来获得元素的id,它似乎工作得很好。

虽然在其他文章中提到过,但我还是想说清楚:

美元(event.target)。Id未定义

美元(event.target)[0]。Id给出Id属性。

id也给出了id属性。

这一点。Id给出Id属性。

and

(美元)。Id未定义。

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

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