পুরানো প্রশ্ন, তবে এখনও অন্তর্দৃষ্টি ইমো সহ কোনও ভাল আপ-টু-ডেট উত্তর নেই।
আজকাল, সমস্ত ব্রাউজার সমর্থন করে mouseover/mouseout
এবং mouseenter/mouseleave
। তবুও, jQuery এতে আপনার হ্যান্ডলারটিকে নিবন্ধভুক্ত করে না mouseenter/mouseleave
, তবে mouseover/mouseout
নীচের কোডটি দেখায় এবং নীরবে এগুলিকে চারপাশে একটি মোড়কে রাখে এবং এর নিজস্ব কিছুটা আলাদা ব্যাখ্যা করে mouseenter/mouseleave
।
ইভেন্টগুলির সঠিক আচরণ বিশেষ করে "প্রতিনিধি হ্যান্ডলারগুলি" সম্পর্কিত relevant দুর্ভাগ্যক্রমে, jQuery এর প্রতিনিধি হ্যান্ডলারগুলি কী এবং ইভেন্টগুলির জন্য তাদের কী গ্রহণ করা উচিত তার নিজস্ব আলাদা ব্যাখ্যা রয়েছে। সরল ক্লিক ইভেন্টের জন্য সেই উত্তরটি অন্য উত্তরে দেখানো হয়েছে ।
তাহলে কীভাবে jQuery সম্পর্কিত কোনও প্রশ্নের উত্তর দিতে হবে, যা ইভেন্ট এবং হ্যান্ডলারের জন্য জাভাস্ক্রিপ্ট শব্দটি ব্যবহার করে তবে উভয়ই আলাদা করে তোলে এবং এর ডকুমেন্টেশনে এটি উল্লেখও করে না?
প্রথম "বাস্তব" জাভাস্ক্রিপ্ট মধ্যে পার্থক্য:
- উভয়
- ব্রাউজারটি তার অবস্থানের নমুনাগুলির চেয়ে দ্রুত গতিতে চলে গেলে মাউস বাইরের / বহিরাগত উপাদানগুলি থেকে অভ্যন্তরীণ / অন্তর্নিহিত উপাদানগুলিতে "লাফিয়ে" যেতে পারে
- যে কোনও
enter/over
একটি পেতে leave/out
পারে (সম্ভবত দেরী / ঝাপটায়)
- ইভেন্টগুলি পয়েন্টারের নীচে দৃশ্যমান উপাদানগুলিতে যায় (অদৃশ্য target লক্ষ্য হতে পারে না)
mouseenter/mouseleave
- নিবন্ধিত যেখানে উপাদান সরবরাহ করা হয় (লক্ষ্য)
- যখনই উপাদান বা কোনও বংশধর (যেমন লাফিয়ে) প্রবেশ / বামে প্রবেশ করে
- এটি বুদবুদ হতে পারে না, কারণ ধারণাগতভাবে বংশধরদের প্রশ্নের মূল উপাদান হিসাবে বিবেচনা করা হয়, অর্থাৎ এমন কোনও শিশু নেই যেখানে অন্য কোনও ঘটনা আসতে পারে (পিতামাতার "প্রবেশ / বাম" অর্থ সহকারে ?!)
- বাচ্চাদেরও একই রকম হ্যান্ডলারগুলি নিবন্ধভুক্ত থাকতে পারে, যা সঠিকভাবে প্রবেশ / ছেড়ে চলে যায় তবে পিতামাতার প্রবেশ / ছুটির চক্রের সাথে সম্পর্কিত নয়
mouseover/mouseout
- লক্ষ্য হ'ল পয়েন্টারের নীচে আসল উপাদান
- লক্ষ্য দুটি জিনিস হতে পারে না: অর্থাত্ একই সময়ে পিতামাতা এবং সন্তানের নয়
- ইভেন্ট "বাসা" করতে পারে না
- কোনও শিশুকে "আউট" করার আগে বাবা-মাকে "আউট" করা দরকার
- বুদবুদ করতে পারে, কারণ লক্ষ্য / সম্পর্কিত টার্গেটটি ইভেন্টটি কোথায় ঘটেছে তা নির্দেশ করে
কিছু পরীক্ষার পরে, এটি দেখায় যে আপনি যতক্ষণ না jQuery "নির্বাচিত নিবন্ধের সাথে প্রতিনিধি হ্যান্ডলারগুলি" ব্যবহার করবেন না, অনুকরণটি অপ্রয়োজনীয় তবে যুক্তিসঙ্গত: এটি mouseover/mouseout
এমন ইভেন্টগুলিকে ফিল্টার করে যা কোনওটিই পায় mouseenter/mouseleave
না। যদিও লক্ষ্যটি গোলমেলে রয়েছে। বাস্তব mouseenter/mouseleave
এমুলেশন যে উপাদান অর্থাত যাই হোক না কেন সন্তান ইঙ্গিত হতে পারে টার্গেট হিসাবে হ্যান্ডলার উপাদান দিতে, হবে mouseover/mouseout
বাহিত।
const list = document.getElementById('log');
const outer = document.getElementById('outer');
const $outer = $(outer);
function log(tag, event) {
const li = list.insertBefore(document.createElement('li'), list.firstChild);
// only jQuery handlers have originalEvent
const e = event.originalEvent || event;
li.append(`${tag} got ${e.type} on ${e.target.id}`);
}
outer.addEventListener('mouseenter', log.bind(null, 'JSmouseenter'));
$outer.on('mouseenter', log.bind(null, '$mouseenter'));
div {
margin: 20px;
border: solid black 2px;
}
#inner {
min-height: 80px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<body>
<div id=outer>
<ul id=log>
</ul>
</div>
</body>