বেশ কয়েকটি দরকারী উত্তর রয়েছে, তবে সর্বশেষতম বিকল্পগুলি কভার করে না বলে মনে হয় । সে লক্ষ্যে আমার সমস্ত উদাহরণ মিলে যাওয়া label
উপাদানগুলির উপস্থিতিও সরবরাহ করে এবং আপনাকে চেকবক্সগুলি গতিশীলভাবে যুক্ত করতে এবং পার্শ্ব-প্যানেলে ফলাফলগুলি (পুনঃনির্দেশ দ্বারা console.log
) দেখার অনুমতি দেয়।
শুনছেন click
ঘটনা checkboxes
হল না একটি ভাল ধারণা যে কীবোর্ড টগল করা জন্য অথবা প্রণীত যেখানে একটি মানানসই পরিবর্তনের জন্য মঞ্জুরি দেয় না যেমন label
উপাদান ক্লিক করা হয়। change
ইভেন্টের জন্য সর্বদা শুনুন ।
:checkbox
বরং jQuery সিউডো-সিলেক্টর ব্যবহার করুন input[type=checkbox]
। :checkbox
খাটো এবং আরও পঠনযোগ্য।
ব্যবহারের is()
jQuery সঙ্গে :checked
একটি চেকবক্স চেক করা হয় কি না পরীক্ষা সিউডো-নির্বাচক। এটি সমস্ত ব্রাউজার জুড়ে কাজ করার গ্যারান্টিযুক্ত।
বিদ্যমান ইভেন্টগুলির সাথে সংযুক্ত বেসিক ইভেন্ট হ্যান্ডলার:
$('#myform :checkbox').change(function () {
if ($(this).is(':checked')) {
console.log($(this).val() + ' is now checked');
} else {
console.log($(this).val() + ' is now unchecked');
}
});
জেএসফিডাল: http://jsfiddle.net/TrueBlueAussie/u8bcggfL/2/
মন্তব্য:
:checkbox
নির্বাচক ব্যবহার করুন , যা ব্যবহার করা ভালinput[type=checkbox]
- এটি ইভেন্টটি নিবন্ধিত হওয়ার সময় উপস্থিত থাকা কেবল মিলিত উপাদানগুলির সাথে সংযোগ স্থাপন করে ।
পূর্বপুরুষের উপাদানগুলির সাথে সংযুক্ত প্রেরিত ইভেন্ট হ্যান্ডলার:
ডেলিগেটেড ইভেন্ট হ্যান্ডলারগুলি এমন পরিস্থিতিতে তৈরি করা হয়েছে যেখানে উপাদানগুলি এখনও বিদ্যমান না থাকতে পারে (গতিশীল লোড বা তৈরি করা) এবং এটি খুব দরকারী। তারা পূর্বপুরুষের উপাদানটির (তাই এই শব্দটি) দায়িত্ব অর্পণ করে ।
$('#myform').on('change', ':checkbox', function () {
if ($(this).is(':checked')) {
console.log($(this).val() + ' is now checked');
} else {
console.log($(this).val() + ' is now unchecked');
}
});
জেএসফিডাল: http://jsfiddle.net/TrueBlueAussie/u8bcggfL/4/
মন্তব্য:
- এটি
change
কোনও পরিবর্তন না করে পূর্বসূরি উপাদানগুলিতে বুদবুদ করতে (এই ক্ষেত্রে ) ইভেন্টগুলি শুনে (এই ক্ষেত্রে ) শুনে কাজ করে #myform
।
- এরপরে এটি
':checkbox'
কেবল বুদ্বুদ শৃঙ্খলে থাকা উপাদানগুলিতে jQuery নির্বাচনকারীকে ( এই ক্ষেত্রে) প্রয়োগ করে ।
- এটা তোলে তারপর কেবলমাত্র সেই ম্যাচিং উপাদান আছে যা ঘটনা সৃষ্ট ইভেন্ট হ্যান্ডলার ফাংশন প্রযোজ্য।
document
অন্য কোনও কিছু যদি কাছাকাছি / সুবিধাজনক না হয় তবে ডেলিগ্রেটেড ইভেন্ট হ্যান্ডলারটি সংযুক্ত করতে ডিফল্ট হিসাবে ব্যবহার করুন ।
body
প্রতিনিধি ইভেন্টগুলি সংযুক্ত করতে ব্যবহার করবেন না কারণ এতে একটি বাগ রয়েছে (স্টাইলিংয়ের সাথে করা) যা এটি মাউস ইভেন্টগুলি পেতে বন্ধ করতে পারে।
প্রতিনিধি হ্যান্ডলারের উত্সবটি হ'ল ইভেন্টের সময় কেবল ম্যাচের উপাদানগুলির উপস্থিতি থাকা প্রয়োজন, যখন ইভেন্ট হ্যান্ডলারটি নিবন্ধভুক্ত ছিল না not এটি ইভেন্টগুলি উত্পন্ন করতে গতিশীল যুক্ত সামগ্রী যুক্ত করতে দেয়।
প্রশ্ন: এটা কি ধীর?
উত্তর: যতক্ষণ ইভেন্টগুলি ব্যবহারকারী-কথোপকথনের গতিতে থাকে ততক্ষণ আপনার কোনও প্রতিনিধি ইভেন্ট হ্যান্ডলার এবং সরাসরি সংযুক্ত হ্যান্ডলারের মধ্যে গতির তুচ্ছ পার্থক্য সম্পর্কে চিন্তা করার দরকার নেই । প্রতিনিধিদের সুবিধাগুলি যে কোনও ছোটখাটো ক্ষতি ছাড়িয়ে যায়। ডেলিগেটেড ইভেন্ট হ্যান্ডলারগুলি নিবন্ধকরণে আসলে দ্রুত হয় কারণ তারা সাধারণত কোনও একক মিলের উপাদানগুলির সাথে সংযুক্ত থাকে।
কেন অনুষ্ঠান prop('checked', true)
গুলি চালায় না change
?
এটি আসলে ডিজাইনের মাধ্যমে। এটি ইভেন্টটিকে আগুন দিলে আপনি সহজেই অন্তহীন আপডেটের পরিস্থিতিতে পড়তে পারেন। পরিবর্তে, পরীক্ষিত সম্পত্তি পরিবর্তনের পরে, একই উপাদানটিতে পরিবর্তিত ইভেন্ট প্রেরণ করুন trigger
(না triggerHandler
):
যেমন trigger
কোন ঘটনা ঘটে না
$cb.prop('checked', !$cb.prop('checked'));
জেএসফিডাল: http://jsfiddle.net/TrueBlueAussie/u8bcggfL/5/
উদাহরণস্বরূপ trigger
, সাধারণ পরিবর্তন ইভেন্টটি ধরা পড়ে
$cb.prop('checked', !$cb.prop('checked')).trigger('change');
জেএসফিডাল: http://jsfiddle.net/TrueBlueAussie/u8bcggfL/6/
মন্তব্য:
- কোনও
triggerHandler
ব্যবহারকারীর পরামর্শ অনুসারে ব্যবহার করবেন না কারণ এটি কোনও প্রতিনিধি ইভেন্ট হ্যান্ডলারের ইভেন্টগুলিকে বুদবুদ করবে না ।
জেএসফিডাল: http://jsfiddle.net/TrueBlueAussie/u8bcggfL/8/
যদিও এটি ইভেন্টের সাথে সরাসরি সংযুক্ত ইভেন্ট হ্যান্ডলারের পক্ষে কাজ করবে :
জেএসফিডাল: http://jsfiddle.net/TrueBlueAussie/u8bcggfL/9/
.TiggerHandler () দ্বারা উদ্ঘাটিত ইভেন্টগুলি DOM শ্রেণিবদ্ধত্বে বাধা দেয় না; যদি তারা সরাসরি লক্ষ্য উপাদান দ্বারা পরিচালিত না হয় তবে তারা কিছুই করে না।
তথ্যসূত্র: http://api.jquery.com/triggerhandler/
কারও কাছে অতিরিক্ত বৈশিষ্ট্য রয়েছে বলে তারা মনে করেন এটি এর দ্বারা আওতাভুক্ত নয়, দয়া করে সংযোজনগুলি করার পরামর্শ দিন ।
this
চেকবক্সের DOM উপাদান ইতিমধ্যে সেট করা আছে তাইthis.checked
যথেষ্ট। আপনি যদি এটিকে ম্যানিপুলেট করার পরিকল্পনা না করেন তবে এর জন্য আপনার আর একটি jQuery অবজেক্ট তৈরি করার প্রয়োজন হবে না।