イベントを発生させた要素のIDを取得する


969

イベントを発生させる要素のIDを取得する方法はありますか?

私は次のようなものを考えています:

$(document).ready(function() {
  $("a").click(function() {
    var test = caller.id;
    alert(test.val());
  });
});
<script type="text/javascript" src="starterkit/jquery.js"></script>

<form class="item" id="aaa">
  <input class="title"></input>
</form>
<form class="item" id="bbb">
  <input class="title"></input>
</form>

もちろん、最初のフォームからイベントが発生した場合、および2番目のフォームからイベントが発生した場合、var testにはidが含まれる必要があります。"aaa""bbb"


25
あなたの例は少し奇妙です。'a'にクリックイベントをアタッチしていますが、アンカーがありません。それを$( 'input.title')。click(...)に変更すると、質問の将来の読者にとって少しわかりやすくなります。
Jason Moore、

3
event.target.idイベントハンドラーで使用して、イベントを発生させた要素のIDを取得できます。
Ilyas karim 2017年

回答:


1293

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");
    });
});

12
うわー!ありがとう。jQueryがそれをうまく抽象化したことに気づかなかった。あなたはロック!(this)と(event.target)の間にはまだ違いがあると思います-イベントをバインドしたオブジェクトとイベントを受け取ったオブジェクトです。
Hafthor 2008

18
残念ながら、event.targetはカスタム属性へのアクセスを許可していません。そのためには、$(this).attr( "organization:thingy");を使用する必要があります。
Zianチョイ

16
@ZianChoy-「カスタム属性」の意味がよくわかりませ$(event.target)んが、jQueryメソッドが必要な場合は使用できます$(event.target).attr("organisation:thingy");
nnnnnn

3
domを操作するためにイベントターゲットにアクセスする必要がある場合は、$(event.target).eq(0)のように実行できることに注意してください。その後、たとえば$(event.target).eq(0).find( 'li')などのdom要素で通常使用するメソッドを使用できます。
オンドリ

31
注意してください:event.targetはクリックされる実際のアイテムです。たとえば、クリックイベントをdivにバインドし、そのdiv内にPとH2要素がある場合、event.targetはH2要素またはPのいずれかをクリックした場合にそれらを返します。「this」は、クリックした子要素に関係なく、実際にイベントをハングしたdivを返します。
ロブ

169

参考までに、これを試してください!できます!

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

16
@gemma他の解決策は私にはうまくいきませんでしたが、これはうまくいきました。遅くなってくれてありがとう。
HPWD 2012

3
@dlackeyそれは私にとって同じです、他の解決策は私のFirefox 12で動作しませんでしたが、これは動作しました。ありがとう
linuxatico

4
埋め込まれたSVGの要素のIDを取得するために、トップの回答が機能しないようです。$(this).attr("id");します。
Matt Fletcher

2
クリックイベントが子を持つ要素上にあるe.target場合、は、子であってもイベントが発生する原因となった正確な要素をthis提供し、イベントが関連付けられている要素を提供することに注意してください。
samrap

97

それは他の投稿で言及されていますが、私はこれを詳しく説明したいと思いました:

$(event.target).id 未定義です

$(event.target)[0].id id属性を指定します。

event.target.id id属性も指定します。

this.id id属性を指定します。

そして

$(this).id 未定義です。

もちろん、jQueryオブジェクトとDOMオブジェクトには違いがあります。「id」はDOMプロパティであるため、それを使用するにはDOM要素オブジェクトにアクセスする必要があります。

(それは私をつまずかせたので、おそらく他の誰かをつまずかせた)


1
私にevent.target.idは何も与えない!
artaxerxe 2013年

3
@artaxerxeこれは、クリックした要素にID:Pがないことを意味します。また、この種のものにはjqueryを使用しないでください。代わりに、イベントのJavaScript属性を使用すると、処理が速くなります。
HellBaby 2014

$(event.target).attr('selector');私には完璧に働きました。
Souleste

85

使用できるjQueryだけに限定されないすべてのイベント

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

どこでevent.targetそれが背中に落ちる失敗するevent.srcElementIE用。上記のコードを明確にするために、jQueryは必要ありませんが、jQueryでも機能します。


10
jQueryを使用しないということは、上記のように、まったく同じ結果を得ながら実行されるコード行が少なくなることを意味します。jQueryはjsを抽象化します。これは直接のjs答えであり、サイズを見てください!
xrDDDD 2013

イベントを呼び出した要素のプロパティへのアクセスを常に提供する 'this'キーワードを使用する方が良いのではないですか?
モルフィドン2015

7
この答えを得るには、すべてのjQueryがらくたを掘り下げる必要がありました。ありがとう。これはこれまでになく重要です:needsmorejquery.com
gromit190

素晴らしい、本当に私を助けてくれました
Barbz_YHOOL

59

を使用(this)して、関数を起動したオブジェクトを参照できます。

'this'あるDOMそれぞれ、あなたが内側(jQueryのの文脈で)コールバック関数のある場合には、例えば、クリックによって呼び出される要素、バインドなどの方法。

詳細はここにあります:http : //remysharp.com/2007/04/12/jquerys-this-demystified/


3
$(html).click()(this)のような関数がある場合、クリックされた要素ではなくhtmlオブジェクトが返されます
TCHdvlp

28

データベースから動的にテーブルを生成し、JSONでデータを受け取ってテーブルに入れます。すべてのテーブル行には、ID以降のアクションに必要な一意のがあるため、DOMが変更された場合は別のアプローチが必要です。

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

2
そうそう、これが私が探していたものです。「デリゲート」が廃止されたため、新しい「オン」でも同じように機能します。私はチェックボックスをDBデータから動的に作成しましたが、もちろんそれらはすべてクリックしたときに何かをするために使用する必要がある異なるIDを持っていました。ここでこのメソッドを使用して、実際にクリックされたIDを取得しました。古い学校のJSでは、チェックボックスのHTMLの各チェックボックスからIDを渡しただけですが、jQueryイベントハンドラモデルではそのようにはできません。
mikato

18

イベントプロパティでイベントを発生させた要素

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/を参照してください。


11

jQueryオブジェクトとしてのソース要素は、

var $el = $(event.target);

これにより、クリック機能も割り当てられた要素ではなく、クリックのソースが取得されます。クリックイベントが親オブジェクト(テーブル行のクリックイベントなど)であり、クリックされたセルが必要な場合に役立ちます。

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

7

あなたが使用しようとすることができます:

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

7

これはほとんどのタイプの要素で機能します。

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

6

委任されたイベントハンドラーの場合、次のようなものがあります。

<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
    });
});

undefinedLIのコンテンツはにラップされているため<span><span>おそらくitemIdがイベントターゲットになるため、itemIdがであることがわかります。次のような簡単なチェックでこれを回避できます。

$(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())、下方向に検索します。を使用する.first()場合.closest()は、最初に一致する祖先要素のみを返し、一致する.find()すべての子孫を返すため、を使用する必要はありません。


1
有用!単純な<li id = "numberID">を取得したのでitemId = $ target.attr( 'id')を使用したので、調整しました。
Zappescu

すべてのIDはそのページで一意である必要があるため、単純なID属性の使用には注意してください。そのため、何らかの理由でそのページにそのような2つのリストが必要な場合、IDが重複する可能性がありますが、これは悪いことです。だからこそ、将来の保証のために常にdata-idを使用する傾向があります。
等時性2017

6

.onイベントを使用できます

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

5

これz-indexは、上記の回答で述べたイベントパラメータよりも高い値で機能します。

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

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

このようにしてid、(この例ではli)要素のを常に取得します。また、親の子要素をクリックしたとき。


4
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を動作させます


これはそれを機能させるための少し時代遅れのオプションのようだと思います
ArnasPečelis2015年

2
@ArnasPečelisは時代遅れですか?いいえ、jQueryではありません。
Kevin B

4

this参照を使用するだけ

$(this).attr("id")

または

$(this).prop("id")

これidにより、click()割り当てられている要素から属性がフェッチされます。そのメソッドにさらにデータを転送する必要がある場合は、それが必要でdata-some-id="<?php $someId; ?>"あり、 `$(this).data(" some-id ")を使用してデータを取得できます。
Roland

3

this.element.attr("id") IE8で正常に動作します。


2

これらの両方が機能し、

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

そして

alert(this.id);

2
$(".classobj").click(function(e){
    console.log(e.currentTarget.id);
})

@ManuelMannhardtこの回答にはリンクがありません。リンクのみの回答ではなく、コードのみの回答です
barbsan

1

関数を使用して、変更されたアイテムのIDと値を取得できます(この例では、Selectタグを使用しました。

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

0

私は一緒に働いています

jQueryオートコンプリート

event上記のように探してみましたが、リクエスト機能が発火しても利用できないようです。私が使用this.element.attr("id")代わりに、要素のIDを取得するには、それが正常に動作しているようです。


0

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>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.