কীভাবে jQuery ব্যবহার করে সমস্ত ক্লিক ইভেন্ট হ্যান্ডলারগুলি সরাবেন?


121

আমার একটা সমস্যা হচ্ছে মূলত, যখন কোনও ব্যবহারকারী কোনও পৃষ্ঠায় একটি 'সম্পাদনা' লিঙ্কটি ক্লিক করেন, নিম্নলিখিত Jquery কোডটি চালিত হয়:

$("#saveBtn").click(function () {
    saveQuestion(id);
});

এটি করে, সেভ বোতামটির অনক্লিক ইভেন্টটি saveQuestion()পদ্ধতিটিকে কল করে এবং সেই প্রশ্নের আইডিতে পাস করে যার জন্য 'সম্পাদনা' লিঙ্কটি ক্লিক করা হয়েছিল।

কিন্তু যদি একই অধিবেশনে ব্যবহারকারী 2 টি প্রশ্নের সম্পাদনায় ক্লিক করে, তবে পূর্ববর্তী clickইভেন্ট হ্যান্ডলারটি ওভাররাইট না করে পরিবর্তে এটি 2 ইভেন্ট হ্যান্ডলারগুলি চালিত করে, যার মধ্যে একটি কল করতে পারে saveQuestion(1)এবং অন্যটি কল করতে পারে saveQuestion(2)। এটি করে 1 টি প্রশ্ন অন্যটির ওভাররাইট করে।

পূর্ববর্তী সমস্ত clickইভেন্টগুলি যে কোনও বোতামে বরাদ্দ করা হয়েছে সেগুলি সরানোর কোনও উপায় আছে?

উত্তর:


202

আপনি ()) এর মতো ইভেন্ট সরানোর জন্য বন্ধ ব্যবহার করবেন :

$("#saveBtn").off("click");

তবে এটি এই উপাদানটির সাথে আবদ্ধ সমস্ত ক্লিক ইভেন্টগুলি সরিয়ে ফেলবে । যদি SaveQuestion সহ ফাংশনটি কেবল ইভেন্টের সাথে আবদ্ধ হয় তবে উপরেরটি এটি করবে। নিম্নলিখিতটি না করলে:

$("#saveBtn").off("click").click(function() { saveQuestion(id); });

31
JQuery 1.7 থেকে, আপনার বাঁধাই এবং বাঁধাইয়ের পরিবর্তে চালু এবং বন্ধ ব্যবহার করা উচিত
রাল্ফ জানসেন

@ লকটার আপনি কীভাবে এটির পরিবর্তে এটি লেখা উচিত তা পরামর্শ দিতে পারেন?
জন ম্যাগনোলিয়া

আমার উপরের আমার পরিবর্তনগুলি দেখুন
রাল্ফ জানসেন

1
.addAttr ( 'onclick'); বা .removeAttr ('অনক্লিক');
অলিতি

13

পূর্ববর্তী সমস্ত ক্লিক ইভেন্টগুলি যে কোনও বোতামে বরাদ্দ করা হয়েছে সেগুলি সরানোর কোনও উপায় আছে?

$('#saveBtn').unbind('click').click(function(){saveQuestion(id)});

unbind()jQuery 3.0 হিসাবে অবহিত off()করা হয়েছে এবং 1.7 সাল থেকে এর ব্যবহারকে উত্সাহ দেওয়া হয়েছে।
স্কাইলার ইটনার


2

আপনি যদি ব্যবহার করেন ...

$(function(){
    function myFunc() {
        // ... do something ...
    };
    $('#saveBtn').click(myFunc);
});

... তবে এটি পরে বাঁধাই করা আরও সহজ হবে।


1
তুমি কি করে বুঝলে? কোনও উপাদানের ইভেন্টটি কীভাবে আবদ্ধ তা নির্বিশেষে তারা সর্বদা একইভাবে আনবাউন্ড হতে পারে ... $ ('# saveBtn')। আনবাইন্ড ('যাই হোক না কেন ইভেন্ট (গুলি)'); এখন, পুনরায় বাঁধা ... হ্যাঁ, আপনার কৌশলটি কিছু পরিস্থিতিতে সহজ হতে পারে।
কাইলফারিস

1
আপনি যদি সমস্ত ক্লিক ইভেন্টগুলি আবদ্ধ করেন, তবে এটি আলাদা নয়। তবে আপনি যদি কেবল একটি নির্দিষ্ট ক্রিয়াকলাপ বন্ধ করতে চান তবে আমি এই ইভেন্টটি দুটি জায়গায় আবার লিখতে চাই না। এবং আপনি যেমন বলেছিলেন, আমি যদি এটি পরে পুনরায় ফিরিয়ে দিতে চাই, তবে এটি করা আরও সহজ, কারণ আমাকে তৃতীয়বার ফাংশনটি লিখতে হবে না।
জ্যারেট মেয়ার

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.