জাভাস্ক্রিপ্টে বর্তমান টার্গেট সম্পত্তি এবং লক্ষ্য সম্পত্তি মধ্যে সঠিক পার্থক্য কি


289

কেউ দয়া করে জাভাস্ক্রিপ্ট ইভেন্টগুলিতে উদাহরণস্বরূপ এবং কোন দৃশ্যে কোন সম্পত্তি ব্যবহার করা হয়েছে তার মধ্যে সম্পত্তি currentTargetএবং targetসম্পত্তি সম্পর্কে সঠিক পার্থক্য বলতে পারেন ?


এর গুরুত্বপূর্ণ এএসপিটির কারণ কিছু ব্রাউজারের আলাদা আলাদা দৃষ্টিভঙ্গি রয়েছে, যেমন আপনি যদি কোনও ডিভি কপি ইভেন্ট শোনেন, এফএফ এ আপনি একটি উপাদানের পরিবর্তে একটি পাঠ্য নোড পাবেন তবে শ্রোতা ডিভ স্তরে থাকবেন।
নিকোস

উত্তর:


401

মূলত, ইভেন্টগুলি ডিফল্টরূপে বুদ্বুদ হয় তাই উভয়ের মধ্যে পার্থক্য হ'ল:

  • target ইভেন্টটি ট্রিগারকারী উপাদান (উদাহরণস্বরূপ, ব্যবহারকারী ক্লিক করেছেন)
  • currentTarget ইভেন্ট শ্রোতার সাথে যুক্ত এমন উপাদান।

এই ব্লগ পোস্টে একটি সহজ ব্যাখ্যা দেখুন ।


111
টার্গেট = উপাদান যা ঘটায় ট্রিগার; কারেন্টটারেজ = উপাদান যা ইভেন্ট শোনে।
মার্কমারিজনিসেন

2
@ মার্কারিজনিসেন আপনার উত্তরটি অবশ্যই উত্তর হিসাবে দেওয়া উচিত কারণ এটি উপরের উত্তরের চেয়ে বেশি কার্যকর এবং আরও বেশি ভোট দিয়েছেন!
Andrea

আপনি দয়া করে এই মন্তব্যে
রহিল উজির

বর্তমানের টার্গেটটিকে "নির্দিষ্ট টার্গেট" হিসাবে ভাবেন
ক্রেইগমাইকেলমার্টিন

এটি সর্বদা একটি উপাদান নয়। যেমনXMLHttpRequest
নু

77

target = উপাদান যা ইভেন্টকে ট্রিগার করেছিল।

currentTarget = ইভেন্টের শ্রোতা রয়েছে এমন উপাদান।


3
উপাদানগুলি একটি ইভেন্টে আগুন দেয়, তারা এটি শোনে না। আমরা হ্যান্ডলারকে এটি কার্যকর করার জন্য নিযুক্ত করি, যখন এটি ঘটে। কারেন্টটিজেট হ'ল ইভেন্ট ইভেন্ট হ্যান্ডলার সংযুক্ত হয়ে গেছে।
সম্যক জৈন

23

ন্যূনতম চলমান উদাহরণ

window.onload = function() {
  var resultElem = document.getElementById('result')
  document.getElementById('1').addEventListener(
    'click',
    function(event) {
      resultElem.innerHTML += ('<div>target: ' + event.target.id + '</div>')
      resultElem.innerHTML += ('<div>currentTarget: ' + event.currentTarget.id + '</div>')
    },
    false
  )
  document.getElementById('2').dispatchEvent(
          new Event('click', { bubbles:true }))
}
<div id="1">1 click me
  <div id="2">2 click me as well</div>
</div>
<div id="result">
  <div>result:</div>
</div>

আপনি যদি এখানে ক্লিক করেন:

2 click me as well

তারপরে 1এটি শোনায় এবং ফলাফলটিতে সংযোজন হয়:

target: 2
currentTarget: 1

কারণ সেই ক্ষেত্রে:

  • 2 ইভেন্টটি উদ্ভূত উপাদান
  • 1 ইভেন্টটি শুনেছে এমন উপাদান

আপনি যদি এখানে ক্লিক করেন:

1 click me

পরিবর্তে, ফলাফল:

target: 1
currentTarget: 1

71 এ ক্রোমিয়াম পরীক্ষিত।


18

যদি এটি স্টিক না হয় তবে এটি ব্যবহার করে দেখুন:

বর্তমান মধ্যে currentTargetউপস্থিত বোঝায়। এটি সবচেয়ে সাম্প্রতিক লক্ষ্য যা ইভেন্টটি অন্য কোথাও থেকে বুদবুদ হয়ে গেছে caught


5

<style>
  body * {
    margin: 10px;
    border: 1px solid blue;
  }
</style>

<form onclick="alert('form')">FORM
  <div onclick="alert('div')">DIV
    <p onclick="alert('p')">P</p>
  </div>
</form>

যদি উপরের কোডে পি ট্যাগটিতে ক্লিক করেন তবে আপনি তিনটি সতর্কতা পাবেন এবং ডিভ ট্যাগে ক্লিক করলে আপনি দুটি সতর্কতা এবং ফর্ম ট্যাগটিতে ক্লিক করার জন্য একটি একক সতর্কতা পাবেন। এবং এখন নিম্নলিখিত কোড দেখুন,

<style>
  body * {
    margin: 10px;
    border: 1px solid blue;
  }
</style>
<script>
function fun(event){
  alert(event.target+" "+event.currentTarget);
}

</script>

<form>FORM
  <div onclick="fun(event)">DIV
    <p>P</p>
  </div>
</form>
আমরা স্রেফ পি ও ফর্ম ট্যাগ থেকে অন্লিক সরিয়েছি এবং এখন যখন আমরা পি ট্যাগটিতে ক্লিক করি তখন আমরা কেবল একটি সতর্কতা পাই:

[অবজেক্ট এইচটিএমএল অনুচ্ছেদসমূহ]

এখানে ইভেন্ট.টারাগেটটি হ'ল [অবজেক্ট এইচটিএমএলপ্যাগ্রাফিক্যালমেন্ট], এবং ইভেন্ট কুরেন্টটাইজ হ'ল [অবজেক্ট এইচটিএমএল ডিভেলমেন্ট]: সুতরাং

ইভেন্ট.আরগারেট হ'ল নোড যা থেকে ঘটনার সূত্রপাত হয়েছিল এবং বিপরীতে ইভেন্টকন্টেনটরেট নোডকে বোঝায় যেখানে বর্তমান-ইভেন্ট শ্রোতার সংযুক্ত ছিল more আরও জানার জন্য বুদবুদ দেখুন

এখানে আমরা পি ট্যাগটিতে ক্লিক করেছি তবে পি তে আমাদের শ্রোতা নেই তবে এর মূল উপাদান ডিভের উপর রয়েছে।


2

ইভেন্ট.আরগারেট হ'ল নোড যা থেকে ঘটনার সূত্রপাত ঘটে ie আপনি যেখানেই আপনার ইভেন্ট শ্রোতা রাখুন (অনুচ্ছেদে বা স্প্যানে), ইভেন্ট.টারাজেট নোডকে বোঝায় (যেখানে ব্যবহারকারী ক্লিক করেছেন)।

বিপরীতে ইভেন্ট.কন্ট্রেনটারেজেট নোডকে বোঝায় যেখানে বর্তমান-ইভেন্ট শ্রোতা যুক্ত ছিলেন। অর্থাৎ। যদি আমরা আমাদের ইভেন্ট শ্রোতাকে অনুচ্ছেদে নোডে সংযুক্ত করে থাকি, তবে ইভেন্ট.আর্টেজেট প্যারাগ্রাফটিকে বোঝায় যখন ইভেন্ট.আরটিজেট এখনও স্প্যানকে বোঝায়। দ্রষ্টব্য: যদি আমাদের শরীরে কোনও ইভেন্ট শ্রোতা থাকে তবে এই ইভেন্ট-শ্রোতার ক্ষেত্রে ইভেন্ট কন্টেন্টারট্যাজেট শরীরকে বোঝায় (যেমন ইভেন্ট ইভেন্ট-লাস্টার্নারের ইনপুট হিসাবে প্রদত্ত ইভেন্টটি আপডেট করা হয় প্রতিটি সময় ইভেন্ট একটি নোড আপকে বুদবুদ করছে)।


এই পৃষ্ঠাটি দেখার জন্য যে কেউ এই উত্তরটি ভুল! গৃহীত উত্তর চেক করুন! এই জিনিসটি বিস্মৃত হওয়া উচিত। ডেলিগেটটারেজ হ'ল নোড যা উল্লেখ করে যেখানে ইভেন্টটি সংযুক্ত ছিল।
লিটলট্রিএক্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.