සිදුවීමක් ඉවත් කළ මූලද්‍රව්‍යයේ හැඳුනුම්පත ලබා ගැනීම


984

සිදුවීමක් ගිනි තබන මූලද්‍රව්‍යයේ හැඳුනුම්පත ලබා ගැනීමට ක්‍රමයක් තිබේද?

මම මේ වගේ දෙයක් හිතනවා:

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

ඇත්ත වශයෙන්ම var testහි හැඳුනුම්පත අඩංගු විය යුතුය "aaa", සිදුවීම පළමු පෝරමයෙන් ඉවත් කරනු "bbb"ලැබුවහොත් සහ දෙවන පෝරමයෙන් සිදුවීම ඉවත් කරන්නේ නම්.


25
ඔබේ උදාහරණය ටිකක් අමුතුයි. ඔබ 'a' වෙත ක්ලික් කිරීමේ සිදුවීමක් අමුණයි, නමුත් කිසිදු නැංගුරම් නොමැත. එය $ ('input.title') ලෙස වෙනස් කිරීම ක්ලික් කරන්න (...) ඔබේ ප්‍රශ්නයේ අනාගත පා readers කයන්ට ටිකක් පැහැදිලි වනු ඇත.
ජේසන් මුවර්

3
event.target.idසිදුවීමක් ඉවත් කළ මූලද්‍රව්‍යයේ හැඳුනුම්පත ලබා ගැනීමට ඔබට සිදුවීම් හසුරුවන්නා තුළ භාවිතා කළ හැකිය .
ඉලියාස් කරීම්

Answers:


1305

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 එය එතරම් හොඳින් සාරාංශගත කර ඇති බව වටහා ගත්තේ නැත. ඔබ සොලවන්න! (මෙය) සහ (event.target) අතර වෙනස තවමත් පවතිනු ඇතැයි මම සිතමි - ඔබ වස්තුව වීම නිසා සිදුවීම ලැබුනු වස්තුවට එදිරිව.
හැෆ්තෝර්

18
අවාසනාවට, event.target එහි අභිරුචි ගුණාංග වෙත ප්‍රවේශ වීමට ඉඩ නොදේ. එය සිදු කිරීම සඳහා යමෙකු use (මෙය) භාවිතා කළ යුතුය .attr ("සංවිධානය: දෙයක්");.
සියාන් චෝයි

16
@ සියාන්චෝයි - "අභිරුචි ගුණාංග" යන්නෙන් ඔබ අදහස් කරන්නේ කුමක්දැයි මට හරියටම විශ්වාස නැත, නමුත් ඔබට $(event.target)jQuery ක්‍රමයක් අවශ්‍ය නම් භාවිතා කළ හැකිය , උදා $(event.target).attr("organisation:thingy");.
nnnnnn

3
ඩොම් හැසිරවීම සඳහා ඔබට සිදුවීම් ඉලක්කයට ප්‍රවේශය අවශ්‍ය නම් ඔබට මෙවැනි දෙයක් කළ හැකි බව මම සිතමි: event (event.target) .eq (0). එවිට ඔබට සාමාන්‍යයෙන් om (event.target) වැනි මූලද්‍රව්‍යයක් සමඟ භාවිතා කළ හැකි ඕනෑම ක්‍රමයක් භාවිතා කළ හැකිය .eq (0). නිදසුනක් ලෙස සොයා ගන්න ('li').
රූස්ටර්

32
කරුණාකර සටහන් කරන්න: event.target යනු ක්ලික් කරන සැබෑ අයිතමයයි . නිදසුනක් ලෙස, ඔබ ක්ලික් කිරීමේ සිදුවීමක් div එකකට බන්ධනය කරන්නේ නම්, එම div එක තුළ P සහ H2 මූලද්‍රව්‍යයක් තිබේ නම් - event.target එකෙන් එකක් ක්ලික් කළහොත් H2 මූලද්‍රව්‍යය හෝ P නැවත ලබා දෙනු ඇත. ඔබ ක්ලික් කළ ළමා අංගය කුමක් වුවත් "මෙය" ඔබ සිදුවීම එල්ලා තැබූ කොටස සැබවින්ම ආපසු ලබා දෙනු ඇත.
රොබ්

174

යොමු කිරීම සඳහා, මෙය උත්සාහ කරන්න! එය වැඩ කරනවා!

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

16
@gemma අනෙක් විසඳුම මට ප්‍රයෝජනවත් නොවූ නමුත් මෙය ක්‍රියාත්මක විය. ප්‍රමාද වීම ගැන ස්තූතියි.
HPWD

3
ladlackey එය මට එක හා සමානයි, අනෙක් විසඳුම මගේ ෆයර්ෆොක්ස් 12 මත ක්‍රියා කළේ නැත, නමුත් මෙය සිදු විය. ස්තූතියි
linuxatico

4
කාවැද්දූ SVG එකක මූලද්‍රව්‍යයක හැඳුනුම්පත ලබා ගැනීම සඳහා ඉහළ පිළිතුර ක්‍රියා කරන බවක් නොපෙනේ. $(this).attr("id");කරයි.
මැට් ෆ්ලෙචර්

3
ඔබේ ක්ලික් කිරීමේ සිදුවීම ළමයින් සමඟ ඇති මූලද්‍රව්‍යයක් මත තිබේ e.targetනම්, එය කුඩා කාලයේ දී වුවද සිදුවීම ඉවත් කිරීමට හේතු වූ නිශ්චිත අංගය ඔබට ලබා දෙන බව මතක තබා ගන්න this.
samrap

99

එය වෙනත් තනතුරු වල සඳහන් වුවද, මට මෙය උච්චාරණය කිරීමට අවශ්‍ය විය:

$(event.target).id නිර්වචනය කර නැත

$(event.target)[0].id හැඳුනුම්පත ලබා දෙයි.

event.target.id හැඳුනුම්පත ද ලබා දෙයි.

this.id හැඳුනුම්පත ලබා දෙයි.

සහ

$(this).id නිර්වචනය කර නැත.

ඇත්ත වශයෙන්ම, වෙනස්කම් jQuery වස්තු සහ DOM වස්තු අතර වේ. "id" යනු DOM දේපලකි, එබැවින් එය භාවිතා කිරීම සඳහා ඔබ DOM මූලද්‍රව්‍ය වස්තුව මත සිටිය යුතුය.

(එය මා පොළඹවා ඇත, එබැවින් එය වෙනත් අයෙකු උසිගැන්වීමට ඉඩ ඇත)


1
මට, event.target.idකිසිවක් දෙන්නේ නැත!
artaxerxe

3
axartaxerxe මෙයින් අදහස් කරන්නේ ඔබේ ක්ලික් කළ මූලද්‍රව්‍යයට හැඳුනුම්පතක් නොමැති බවයි: P; මේ වගේ දේවල් සඳහා jquery ද භාවිතා නොකරන්න .... සිදුවීම් ජාවාස්ක්‍රිප්ට් ගුණාංග භාවිතා කරන්න.
හෙල්බබී

1
$(event.target).attr('selector');මා වෙනුවෙන් පරිපූර්ණව වැඩ කළා.
සෝලෙස්ටෙ

86

සියලුම සිදුවීම් සඳහා, ඔබට භාවිතා කළ හැකි jQuery වලට පමණක් සීමා නොවේ

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

එහිදී event.targetඑය මත නැවත යෙදී අසමත් event.srcElementIE සඳහා. ඉහත කේතය පැහැදිලි කිරීම සඳහා jQuery අවශ්‍ය නොවන අතර jQuery සමඟද ක්‍රියා කරයි.


10
JQuery භාවිතා නොකිරීම යන්නෙන් අදහස් කරන්නේ ඉහත පෙන්වා ඇති පරිදි එකම ප්‍රති result ලය ලබා ගන්නා විට අඩු කේත රේඛා ධාවනය වීමයි. jQuery සාරාංශ js. මෙය j ජු js පිළිතුර වන අතර ප්‍රමාණය දෙස බලන්න!
xrDDDD

සැමවිටම මෙම සිදුවීම භාවිතා කළ මූලද්‍රව්‍යයේ ගුණාංග වෙත ප්‍රවේශය ලබා දෙන 'මෙම' මූල පදය භාවිතා කිරීම වඩා හොඳ නොවේද?
මෝර්ෆිඩන්

7
මෙම පිළිතුර ලබා ගැනීම සඳහා සියලු jQuery කපටිකම් හාරා බැලීමට සිදු විය. ස්තූතියි. මෙය වෙන කවරදාටත් වඩා අදාළ ය: needmorejquery.com
gromit190

නියමයි, ඇත්තටම මට උදව් කළා
බාබ්ස්_හූල්

59

(this)ශ්‍රිතය ඉවත් කළ වස්තුව යොමු කිරීමට ඔබට භාවිතා කළ හැකිය .

'this'යනු DOM එක් එක්, ඔබ තුළ (jQuery සන්දර්භය තුළ) callback කාර්යය විට, උදාහරණයක් ලෙස, ක්ලික් විසින් කැඳවන අංගයක්, බඳින්න, ආදිය ක්රම.

ඔබට වැඩිදුර ඉගෙන ගත හැකි ස්ථානය මෙන්න: http://remysharp.com/2007/04/12/jquerys-this-demystified/


4
ඔබට $(html).click()(මෙය) වැනි ශ්‍රිතයක් තිබේ නම් එය ක්ලික් කළ මූලද්‍රව්‍යය නොව html වස්තුව නැවත ලබා දෙනු ඇත
TCHdvlp

28

මම දත්ත සමුදායකින් ගතිකව වගුවක් ජනනය කරමි, JSON හි දත්ත ලබාගෙන එය වගුවකට දමමි. සෑම වගු පේළියකටම අද්විතීය IDවූ අතර එය වැඩිදුර ක්‍රියා සඳහා අවශ්‍ය වේ, එබැවින් DOM වෙනස් වුවහොත් ඔබට වෙනස් ප්‍රවේශයක් අවශ්‍ය වේ:

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

2
ඔහ්, මේ මම සොයමින් සිටියේ මෙයයි. "නියෝජිතයා" දැන් අතහැර දමා ඇති බැවින් එය නව "මත" සඳහා ද ක්‍රියා කරයි. මා සතුව ඩීබී දත්ත වලින් ගතිකව නිර්මාණය කරන ලද පිරික්සුම් පෙට්ටි තිබී ඇති අතර, ඇත්ත වශයෙන්ම ඒවා සියල්ලටම වෙනස් හැඳුනුම්පත් තිබී ඇති අතර ඒවා ක්ලික් කිරීමේදී යමක් කිරීමට මට අවශ්‍ය විය. ඇත්ත වශයෙන්ම ක්ලික් කළ හැඳුනුම්පත ලබා ගැනීම සඳහා මම මෙම ක්‍රමය භාවිතා කළෙමි. පැරණි පාසලේ ජේඑස් හි මම චෙක් කොටුවේ HTML හි ඇති සෑම පිරික්සුම් කොටුවකින්ම හැඳුනුම්පත ලබා දුන්නෙමි, නමුත් jQuery සිදුවීම් හසුරුවන ආකෘතිය සමඟ එය කළ නොහැක.
මිකාටෝ

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/


12

JQuery වස්තුවක් ලෙස ප්‍රභව මූලද්‍රව්‍යය ලබා ගත යුතුය

var $el = $(event.target);

ක්ලික් කිරීමේ ශ්‍රිතය ද පවරා ඇති මූලද්‍රව්‍යයට වඩා මෙය ක්ලික් කිරීමේ ප්‍රභවය ලබා ගනී. ක්ලික් කිරීමේ සිදුවීම මව් වස්තුවක ඇති විට ප්‍රයෝජනවත් විය හැකිය. EG.a වගු පේළියක සිදුවීමක් ක්ලික් කරන්න, ඔබට ක්ලික් කළ කොටුව අවශ්‍ය වේ

$("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 හි අන්තර්ගතය a වලින් ඔතා ඇති බැවින් <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()) භාවිතා කරන්න. භාවිතා කරන .first()විට ඔබ භාවිතා කිරීමට අවශ්‍ය නැත .closest(), මන්ද එය පළමු ගැලපෙන මුතුන් මිත්තන්ගේ මූලද්‍රව්‍යය පමණක් ලබා දෙන අතර .find()ගැලපෙන සියලු පරම්පරාවන් ආපසු ලබා දෙයි.


1
ප්‍රයෝජනවත්! මම සරල <li id ​​= "numberID"> ලබාගෙන ඇති නිසා මම මගේ නඩුව සකස් කළෙමි, එබැවින් මම අයිතමය = $ target.attr ('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 මෙතන .


මම හිතන්නේ මෙය වැඩ කිරීමට යල් පැන ගිය විකල්පයක් වගේ
අර්නාස් පෙසෙලිස්

2
N අර්නස්පෙලිස් යල් පැන ගිය එකක්ද? නැත, jQuery පමණක් නොවේ.
කෙවින් බී

4

thisයොමුව භාවිතා කරන්න

$(this).attr("id")

හෝ

$(this).prop("id")

එමඟින් පවරා idඇති මූලද්‍රව්‍යයෙන් ගුණාංගය ලබා ගනී click(). ඔබට එම ක්‍රමයට තවත් දත්ත මාරු කිරීමට අවශ්‍ය නම්, ඔබට අවශ්‍ය වන data-some-id="<?php $someId; ?>"අතර පසුව එය ලබා ගැනීමට ඔබට `$ (මෙය) .දත්ත (" යම්-හැඳුනුම්පතක් ") කළ හැකිය.
රෝලන්ඩ්

3

this.element.attr("id") IE8 හි හොඳින් ක්‍රියා කරයි.


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

Answer මැනුවෙල් මෑන්හාර්ඩ් මෙම පිළිතුරෙහි කිසිදු සම්බන්ධයක් නොමැත, එය කේතයට පමණක් පිළිතුරකි, සම්බන්ධකයට පමණක් පිළිතුර නොවේ
බාබ්සන්

2

මේ දෙකම වැඩ,

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

සහ

alert(this.id);

1

වෙනස් කළ අයිතමය සඳහා හැඳුනුම්පත සහ වටිනාකම ලබා ගැනීම සඳහා ඔබට ශ්‍රිතය භාවිතා කළ හැකිය (මගේ උදාහරණයේ දී, මම තෝරාගත් ටැගයක් භාවිතා කර ඇත.

              $('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")ඒ වෙනුවට මූලද්‍රව්‍ය හැඳුනුම්පත ලබා ගැනීමට පුරුදුව සිටි අතර එය හොඳින් ක්‍රියාත්මක වන බව පෙනේ.


0

කෝණික 7.x හි ඔබට ස්වදේශීය මූලද්‍රව්‍යය සහ එහි හැඳුනුම්පත හෝ ගුණාංග ලබා ගත හැකිය.

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>

0

පිරිසිදු JS සරලයි

aaa.onclick = handler;
bbb.onclick = handler;

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.