আপনি এটি পড়ার আগে ইভেন্টের এই তালিকাটিকে অন্য পৃষ্ঠায় টানুন, এপিআই নিজেই প্রচুর সহায়ক, এবং আমি নীচে যা আলোচনা করছি তার সবই এই পৃষ্ঠা থেকে সরাসরি লিঙ্ক করা আছে ।
প্রথমত, .click(function)এটি আক্ষরিক জন্য একটি শর্টকাট .bind('click', function), তারা সমান। হ্যান্ডলারকে কোনও উপাদানের সাথে সরাসরি বাঁধার সময় এগুলি ব্যবহার করুন :
$(document).click(function() {
alert("You clicked somewhere in the page, it bubbled to document");
});
যদি এই উপাদানটি প্রতিস্থাপন করা হয় বা ফেলে দেওয়া হয় তবে এই হ্যান্ডলারটি আর থাকবে না। এছাড়াও হ্যান্ডলার সংযুক্ত করার জন্য এই কোডটি চালানোর সময় যে উপাদানগুলি ছিল না সেগুলি (যেমন নির্বাচক তখন এটি পেয়েছিল) হ্যান্ডলারটি পাবে না।
.live()এবং .delegate()একইভাবে সম্পর্কিত, .delegate()প্রকৃতপক্ষে .live()অভ্যন্তরীণভাবে ব্যবহার করে, তারা উভয়ই বুদবুদ করার জন্য ইভেন্টগুলি শোনেন। এটি নতুন এবং পুরানো উপাদানগুলির জন্য কাজ করে , তারা একইভাবে ইভেন্টগুলিকে বুদবুদ করে। আপনি একজন অভিভাবক / সাধারণ পূর্বপুরুষ যে পেজটি থাকবে এবং যে কোনো স্থানে, ব্যবহার প্রতিস্থাপিত করা যাবে না না থাকে তাহলে যখন আপনার উপাদান, পরিবর্তন হতে পারে যেমন নতুন সারি, তালিকার আইটেম, ইত্যাদি যোগ করুন এটি আপনাকে এগুলি ব্যবহার .live()ভালো:
$(".clickAlert").live('click', function() {
alert("A click happened");
});
তবে যদি আপনার কোথাও কোনও অভিভাবক উপাদান থাকে যা প্রতিস্থাপিত হচ্ছে না (তাই এর ইভেন্ট হ্যান্ডলাররা বিদায় নিচ্ছেন না) আপনার সাথে এটি পরিচালনা করা উচিত .delegate():
$("#commonParent").delegate('.clickAlert', 'click', function() {
alert("A click happened, it was captured at #commonParent and this alert ran");
});
এটি প্রায় একইরূপে কাজ করে .live(), তবে ক্যাপচার হওয়ার আগে হ্যান্ডলারের মৃত্যুদণ্ড কার্যকর হওয়ার আগে ইভেন্টটি কয়েকবার বুদবুদ হয়। এগুলির উভয়েরই অন্য একটি সাধারণ ব্যবহার বলা হয় যে কোনও উপাদানটিতে আপনার শ্রেণি পরিবর্তিত হয়, আপনি যে নির্বাচকটির সাথে মূলত ব্যবহার করেছিলেন তার সাথে আর মেলে না ... এই পদ্ধতিগুলির সাথে নির্বাচককে ইভেন্টের সময় মূল্যায়ন করা হয় , যদি এটি মেলে, হ্যান্ডলারটি চালায় .. । সুতরাং উপাদানটি আর নির্বাচকের সাথে মেলে না, এটি আর কার্যকর হবে না। সঙ্গে .click()অবশ্য ইভেন্ট হ্যান্ডলার DOM উপাদান উপর বাউন্ড অধিকার, যে এটি মেলে না যাই হোক না কেন নির্বাচক সেটা খুঁজে পেতে ব্যবহার করা হয়েছিল অপ্রাসঙ্গিক ... ঘটনা আবদ্ধ হয় এবং যতক্ষণ যে উপাদান চলে গেছে এটা স্থিত হচ্ছে, অথবা হ্যান্ডলার মাধ্যমে সরানো হয় .unbind()।
তবুও জন্য আরেকটি সাধারণ ব্যবহার .live()এবং .delegate()হয় কর্মক্ষমতা । আপনি যদি প্রচুর উপাদানগুলির সাথে কাজ করে থাকেন তবে প্রতিটি উপাদানকে সরাসরি ক্লিক হ্যান্ডলার সংযুক্ত করা ব্যয়বহুল এবং সময় সাপেক্ষ। এই ক্ষেত্রে একটি একক হ্যান্ডলার সেটআপ করা এবং বুদবুদকে কাজ করতে দেওয়া আরও মিতব্যয়ী , এই প্রশ্নটি কোথায় এটি একটি বিশাল পার্থক্য নিয়েছে তা একবার দেখুন, এটি প্রয়োগের একটি ভাল উদাহরণ example
ট্রিগারিং - আপডেট হওয়া প্রশ্নের জন্য
এখানে 2 টি প্রধান ইভেন্ট-হ্যান্ডলার ট্রিবিং ফাংশন উপলব্ধ রয়েছে, তারা এপিআইতে একই "ইভেন্ট হ্যান্ডলার সংযুক্তি" বিভাগের অধীনে আসে , এগুলি হয় .trigger()এবং .triggerHandler()। .trigger('eventName')সাধারণ ইভেন্টগুলির জন্য কিছু শর্টকাট অন্তর্নির্মিত রয়েছে, উদাহরণস্বরূপ:
$().click(fn); //binds an event handler to the click event
$().click(); //fires all click event handlers for this element, in order bound
আপনি এখানে এই শর্টকাটগুলি সহ একটি তালিকা দেখতে পারেন ।
পার্থক্য হিসাবে, .trigger()ইভেন্ট হ্যান্ডলারটিকে ট্রিগার করে (তবে বেশিরভাগ সময় ডিফল্ট ক্রিয়া হয় না, উদাহরণস্বরূপ কার্সারটিকে একটি ক্লিকের মধ্যে সঠিক জায়গায় স্থাপন করা <textarea>)। এটি ইভেন্ট হ্যান্ডলারগুলিকে ক্রমবদ্ধভাবে আবদ্ধ হওয়ার কারণ ঘটায় (দেশীয় ঘটনাটি হবে), নেটিভ ইভেন্ট ক্রিয়াকলাপগুলিকে আগুন ধরিয়ে দেয় এবং ডোমকে বুদবুদ দেয়।
.triggerHandler()সাধারণত অন্যরকম উদ্দেশ্যে হয়, এখানে আপনি কেবল আবদ্ধ হ্যান্ডলার (গুলি) গুলি চালানোর চেষ্টা করছেন, এটি নেটিভ ইভেন্টগুলিতে আগুন লাগায় না, যেমন একটি ফর্ম জমা দেওয়া। এটি ডোমকে বুদবুদ দেয় না, এবং এটি শৃঙ্খলযোগ্য নয় (এটি ইভেন্টের জন্য শেষ-সীমাবদ্ধ ইভেন্ট হ্যান্ডলার যা-ই ফিরে আসে)। উদাহরণস্বরূপ, যদি আপনি কোনও focusইভেন্টটি ট্রিগার করতে চান তবে বাস্তবে বিষয়টিকে ফোকাস না করতে চান, আপনি কেবল কোডটি .focus(fn)চালানোর জন্য আবদ্ধ করতে চান , এটি এটি করবে, যেখানে .trigger()সেইসাথে উপাদানটি ফোকাস করার পাশাপাশি বুদবুদ আপ হবে।
এখানে একটি বাস্তব বিশ্বের উদাহরণ:
$("form").submit(); //actually calling `.trigger('submit');`
এটি যে কোনও জমা হ্যান্ডলারগুলি চালিত করবে, উদাহরণস্বরূপ jQuery বৈধতা প্লাগইন , তারপরে সাবমিট করার চেষ্টা করুন <form>। তবে যদি আপনি কেবল বৈধ করতে চান, যেহেতু এটি কোনও submitইভেন্ট হ্যান্ডলারের মাধ্যমে আবদ্ধ করা হয়েছে , তবে <form>পরবর্তী সময়ে জমা না দিন , আপনি এটি ব্যবহার করতে পারেন .triggerHandler('submit'):
$("form").triggerHandler('submit');
প্লাগইনটি হ্যান্ডলারটিকে বৈধতা যাচাই পাস না হলে বোমা ফর্ম জমা দেওয়ার থেকে বাধা দেয়, তবে এই পদ্ধতিটি দিয়ে আমরা কী করি তা যত্নশীল করি না। এটিকে বাতিল করা হোক বা না হোক আমরা ফর্মটি জমা দেওয়ার চেষ্টা করছি না , আমরা কেবল এটি পুনরায় বৈধকরণের জন্য ট্রিগার করতে চেয়েছিলাম এবং অন্য কিছু করতে চাইনি। ( অস্বীকৃতি:.validate() প্লাগইনটিতে একটি পদ্ধতি রয়েছে বলে এটি একটি অতিমাত্রার উদাহরণ , তবে এটি অভিপ্রায়টির একটি শালীন উদাহরণ)