JQuery এ একটি ইভেন্ট হ্যান্ডলার অপসারণ করার সেরা উপায়?




9 Answers

এই প্রশ্নের উত্তর দেওয়ার সময় এটি উপলব্ধ ছিল না, তবে আপনি ইভেন্টগুলি সক্ষম / নিষ্ক্রিয় করতে live() পদ্ধতিটি ব্যবহার করতে পারেন।

$('#myimage:not(.disabled)').live('click', myclickevent);

$('#mydisablebutton').click( function () { $('#myimage').addClass('disabled'); });

এই কোডটির সাথে কী হবে যখন আপনি #mydisablebutton ক্লিক করেন, এটি #myimage উপাদানতে শ্রেণিকে অক্ষম করে। এটি এমনভাবে তৈরি করবে যে নির্বাচক আর উপাদানটির সাথে মিল না করে এবং 'নিষ্ক্রিয়' শ্রেণিটি সরানো না হওয়া পর্যন্ত ইভেন্টটি বহিষ্কার করা হবে না .live () নির্বাচক আবার বৈধ হয়ে উঠবে।

এই পাশাপাশি সেই ক্লাসের উপর ভিত্তি করে স্টাইলিং যোগ করে অন্যান্য সুবিধা রয়েছে।

jquery html-input

আমার একটি input type="image" । এটি মাইক্রোসফ্ট এক্সেলের সেল নোটগুলির মত কাজ করে। কেউ যদি এই input-image যুক্ত করে পাঠ্য বাক্সে একটি সংখ্যা প্রবেশ করে তবে আমি input-image জন্য একটি ইভেন্ট হ্যান্ডলার সেট আপ করি। তারপরে ব্যবহারকারী যখন image ক্লিক করে, তখন তারা কিছু নোট যোগ করতে একটু পপআপ পান।

আমার সমস্যা হল যে যখন কোন ব্যবহারকারী টেক্সট বাক্সে একটি শূন্য প্রবেশ করে তখন আমাকে input-image ইভেন্ট হ্যান্ডলারটি অক্ষম করতে হবে। আমি নিম্নলিখিত চেষ্টা করেছি, কিন্তু কোন উপকারিতা।

$('#myimage').click(function { return false; });



আপনি যদি কেবল একবার একটি ইভেন্টের প্রতিক্রিয়া জানাতে চান তবে নিচের সিনট্যাক্সটি সত্যিই সহায়ক হওয়া উচিত:

 $('.myLink').bind('click', function() {
   //do some things

   $(this).unbind('click', arguments.callee); //unbind *just this handler*
 });

Arguments.callee ব্যবহার করে , আমরা নিশ্চিত করতে পারি যে একটি নির্দিষ্ট বেনামী-ফাংশন হ্যান্ডলার সরানো হয়েছে এবং এইভাবে, প্রদত্ত ইভেন্টের জন্য একক সময় হ্যান্ডলার আছে। এই অন্যদের সাহায্য করে আশা করি।




আমি প্রোপ এবং attr ব্যবহার করে ইভেন্ট নিল সেট ছিল। আমি এক বা অন্য সঙ্গে এটি করতে পারে না। আমিও পেতে পারছিলাম না। আমি একটি টিডি উপাদান কাজ করছি।

.prop("onclick", null).attr("onclick", null)



ইনলাইন মার্কআপ হিসাবে আপনি onclick হ্যান্ডলার যুক্ত করতে পারেন:

<input id="addreport" type="button" value="Add New Report" onclick="openAdd()" />

যদি তাই হয়, jquery .off() বা .unbind() কাজ করবে না। আপনি jQuery ইভেন্টে আসল ইভেন্ট হ্যান্ডলার যোগ করতে হবে:

$("#addreport").on("click", "", function (e) {
   openAdd();
});

তারপর jquery ইভেন্ট হ্যান্ডলারের একটি রেফারেন্স আছে এবং এটি সরাতে পারে:

$("#addreport").off("click")

VoidKing উপরে একটি মন্তব্য এই সামান্য আরো বিশদ উল্লেখ।




ইনলাইন অনকল ইভেন্টটি সরাতে সেরা উপায় হল $(element).prop('onclick', null);




সমস্ত event-handlers remove , আমার জন্য এটি কী কাজ করেছে:

সমস্ত ইভেন্ট হ্যান্ডলারগুলি সরানোর অর্থ হল সমস্ত ইভেন্ট হ্যান্ডলারগুলি element এবং তার child nodes সাথে সংযুক্ত না থাকা ছাড়া সাধারণ HTML structure । এটি করার জন্য, jQuery's clone() সাহায্য করেছে।

var original, clone;
// element with id my-div and its child nodes have some event-handlers
original = $('#my-div');
clone = original.clone();
//
original.replaceWith(clone);

এর সাথে আমাদের কোনও event-handlers সাথে original স্থানে clone থাকবে।

শুভ কামনা ...




ক্ষেত্রে .on() পদ্ধতিটি পূর্বে নির্দিষ্ট উদাহরণের মতো ব্যবহার করা হয়েছিল, যেমন নিম্নোক্ত উদাহরণে:

$('body').on('click', '.dynamicTarget', function () {
    // Code goes here
});

উভয় .off() unbind() এবং .off() পদ্ধতি কাজ করতে যাচ্ছে না

যাইহোক, .undelegate() পদ্ধতি বর্তমান নির্বাচক সাথে মিলিত সমস্ত উপাদানগুলির জন্য ইভেন্ট থেকে হ্যান্ডলার সম্পূর্ণরূপে মুছে ফেলার জন্য ব্যবহার করা যেতে পারে:

$("body").undelegate(".dynamicTarget", "click")



আমার নীচের কোড সব ব্যাখ্যা আশা করি। এইচটিএমএল:

(function($){

     $("#btn_add").on("click",function(){
       $("#btn_click").on("click",added_handler);
       alert("Added new handler to button 1");
     });

  
 
     $("#btn_remove").on("click",function(){
       $("#btn_click").off("click",added_handler);
       alert("Removed new handler to button 1");
     });

  
   function fixed_handler(){
    alert("Fixed handler");
  }
  
   function added_handler(){
    alert("new handler");
  }
  
  $("#btn_click").on("click",fixed_handler);
  $("#btn_fixed").on("click",fixed_handler);
  
  
})(jQuery);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="btn_click">Button 1</button>
  <button id="btn_add">Add Handler</button>
  <button id="btn_remove">Remove Handler</button>
  <button id="btn_fixed">Fixed Handler</button>




বর্ণিত সমস্ত পন্থা আমার জন্য কাজ করে না, কারণ আমি ক্লিক ইভেন্টটি on() সাথে ডকুমেন্টে যুক্ত করছিলাম যেখানে উপাদানটি রান-টাইমে তৈরি হয়েছিল:

$(document).on("click", ".button", function() {
    doSomething();
});


আমার কাজকর্ম

আমি "বাটন" ক্লাসটি আনবিন করতে পারিনি কারণ আমি একই সিএসএস স্টাইলের বোতামটিতে আরেকটি ক্লাস বরাদ্দ করেছি। তাই করে লাইভ / অন-ইভেন্ট-হ্যান্ডলার অবশেষে ক্লিক উপেক্ষা করে:

// prevent another click on the button by assigning another class
$(".button").attr("class","buttonOff");

আশা করি এইটি কাজ করবে.




Related