আমি কীভাবে jQuery এ "হোভার" আনবাইন্ড করব?


107

আমি কীভাবে jQuery এর "হোভার" আনবাইন্ড করব?

এটা কাজ করে না:

$(this).unbind('hover');

2
আপনি কি এমন কোনও ফাংশন আনবাইন্ড করার চেষ্টা করছেন যা আপনি হোভার ইভেন্টে অর্পণ করেছেন, বা আপনি কোনও <a> </a> হওয়ারটি সংশোধন করার চেষ্টা করছেন?
জাস্টিন নিসনার

জাস্টিন নিসসনারের প্রশ্নটি পরিষ্কার করতে, আপনি জাভাস্ক্রিপ্ট / ডিওএম ইভেন্টগুলি বা সিএসএসের ঘোষণাগুলি সরিয়ে দেওয়ার চেষ্টা করছেন? পরেরটি আরও জটিল বিষয়।
চোখের পলকহীনতা

উত্তর:


214

$(this).unbind('mouseenter').unbind('mouseleave')

বা আরও সংক্ষেপে (ধন্যবাদ চাদ গ্রান্ট ):

$(this).unbind('mouseenter mouseleave')


42
বা this (এটি) .উনবাইন্ড ('মাউসেন্টার মাউসলেভ')
চাদ গ্রান্ট

মাউসেন্টের জন্য মাউসলেভের পরে এটি প্রয়োজনীয় ক্রম?
সংঘভি

70

প্রকৃতপক্ষে, jQuery ডকুমেন্টেশনের উপরে দেখানো শৃঙ্খলাবদ্ধ উদাহরণগুলির চেয়ে আরও সহজ পন্থা রয়েছে (যদিও তারা ঠিক কাজ করবে):

$("#myElement").unbind('mouseenter mouseleave');

JQuery 1.7 হিসাবে, আপনি ব্যবহার করতে সক্ষম হন $.on()এবং $.off()ইভেন্ট বন্ডিংয়ের জন্য, তাই হোভার ইভেন্টটি আবদ্ধ করতে আপনি আরও সহজ এবং পরিপাটি ব্যবহার করবেন:

$('#myElement').off('hover');

সিউডো-ইভেন্ট-নাম "হোভার" শর্টহ্যান্ড হিসাবে "মাউসেন্টার মাউসলেভ" হিসাবে ব্যবহৃত হয় তবে পূর্ববর্তী jQuery সংস্করণগুলিতে আলাদাভাবে পরিচালিত হয়েছিল; আপনাকে আক্ষরিক ইভেন্টের প্রতিটি নাম স্পষ্টভাবে মুছে ফেলতে হবে। $.off()এখন ব্যবহার করা আপনাকে একই শর্টহ্যান্ড ব্যবহার করে উভয় মাউস ইভেন্ট ড্রপ করতে দেয়।

২০১ Edit সম্পাদনা করুন:

এখনও একটি জনপ্রিয় প্রশ্ন তাই এটি এর মনোযোগ আকর্ষণ মূল্য @ Dennis98 এর jQuery এর 1.9+ যে নীচের মন্তব্য বিন্দু, "হোভার" ঘটনা অবচিত মান "mouseenter mouseleave" কল পক্ষে। সুতরাং আপনার ইভেন্টের বাধ্যবাধকতার ঘোষণাটি এখন দেখতে হবে:

$('#myElement').off('mouseenter mouseleave');


4
আমার jQuery 1.10.2 আছে এবং এটি $.off("hover")কাজ করে না। যাইহোক, উভয় ইভেন্ট ব্যবহার দুর্দান্ত কাজ করে।
অ্যালেক্সিস উইল্কে

উল্লেখযোগ্য যে উল্লেখ করা হয় যে যখন একাধিক ফিল্টারিং আর্গুমেন্ট দেওয়া হয়, প্রদত্ত সমস্ত আর্গুমেন্ট অবশ্যই ইভেন্ট হ্যান্ডলারটি অপসারণের জন্য মেলে। আমি আরও নোট করেছি যে jQuery এপিআই ডক্স জানিয়েছে যে। অফ () পদ্ধতি .on () এর সাথে সংযুক্ত ইভেন্ট হ্যান্ডলারগুলি সরিয়ে দেয়। এটির অর্থ কেবলমাত্র .on () ব্যবহার করে যুক্ত ইভেন্টগুলিতে প্রযোজ্য কিনা তা আমি নিশ্চিত নই। কিন্তু এটা করা উচিত নয়।
ফিল.ওহিলার 25'15

@ অ্যালেক্সিস উইলকে হ্যাঁ, এটি v1.9-এ সরিয়ে ফেলা হয়েছে, শেষ লিঙ্কটি দেখুন ..;)
ডেনিস98

1
@ ডেনিস ৯৮ - আপনি কেবল jQuery হোভার হ্যাক সম্পর্কে অবজ্ঞাত.জেজে সরানো হচ্ছে এমন কথা বলছেন? off .Of () ইভেন্টের বাইন্ডিং এখনও jQuery এর পরবর্তী সংস্করণগুলিতে উপলব্ধ।
ফিল.ওহিলার

ঠিক। :) $.off()এখনও আছে, এটি বর্তমানে আনবাইন্ডিং ইভেন্টগুলির প্রস্তাবিত পদ্ধতি। এখন হিসাবে আপনার লিখতে হবে $(element).off("mouseenter mouseleave");
ডেনিস

10

আবদ্ধমুক্ত mouseenterএবং mouseleaveঘটনা আলাদাভাবে বা আবদ্ধমুক্ত উপাদান (গুলিতে) সমস্ত ঘটনা।

$(this).unbind('mouseenter').unbind('mouseleave');

অথবা

$(this).unbind();  // assuming you have no other handlers you want to keep

4

আনবাইন্ড () হার্ডকডড ইনলাইন ইভেন্টগুলির সাথে কাজ করে না।

সুতরাং, উদাহরণস্বরূপ, আপনি যদি মাউসওভার ইভেন্টটি বন্ধ করতে চান তবে <div id="some_div" onmouseover="do_something();">আমি পেয়েছি এটি $('#some_div').attr('onmouseover','')অর্জনের জন্য এটি একটি দ্রুত এবং নোংরা উপায়।


4

আরেকটি সমাধান হ'ল লাইভ () এর সাথে সংযুক্ত ইভেন্টগুলির জন্য .die ()

প্রাক্তন .:

// attach click event for <a> tags
$('a').live('click', function(){});

// deattach click event from <a> tags
$('a').die('click');

আপনি এখানে একটি ভাল রেফারেন্স খুঁজে পেতে পারেন: jQuery .live () এবং .die () অন্বেষণ

(আমার ইংরাজির জন্য দুঃখিত: ">)


2

সমস্ত হোভার পর্দার পিছনে করছে মাউসওভার এবং মাউসআউট বৈশিষ্ট্যের সাথে আবদ্ধ। আমি পৃথকভাবে এই ইভেন্টগুলি থেকে আপনার ফাংশনগুলি আবদ্ধ এবং আবদ্ধ করব।

উদাহরণস্বরূপ, বলুন আপনার নীচের এইচটিএমএল রয়েছে:

<a href="#" class="myLink">Link</a>

তাহলে আপনার jQuery হবে:

$(document).ready(function() {

  function mouseOver()
  {
    $(this).css('color', 'red');
  }
  function mouseOut()
  {
    $(this).css('color', 'blue');
  }

  // either of these might work
  $('.myLink').hover(mouseOver, mouseOut); 
  $('.myLink').mouseover(mouseOver).mouseout(mouseOut); 
  // otherwise use this
  $('.myLink').bind('mouseover', mouseOver).bind('mouseout', mouseOut);


  // then to unbind
  $('.myLink').click(function(e) {
    e.preventDefault();
    $('.myLink').unbind('mouseover', mouseOver).unbind('mouseout', mouseOut);
  });

});

সংশোধন, jquery src হোভার দেখার পরে আসলে মাউসেন্টার / মাউসলেভের সাথে আবদ্ধ। আপনারও একই কাজ করা উচিত।
bendewey

2

আপনি onব্যবহার করে সংযুক্ত একটি নির্দিষ্ট ইভেন্ট হ্যান্ডলারটি সরাতে পারেনoff

$("#ID").on ("eventName", additionalCss, handlerFunction);

// to remove the specific handler
$("#ID").off ("eventName", additionalCss, handlerFunction);

এটি ব্যবহার করে, আপনি কেবল হ্যান্ডলারের কাজটি সরিয়ে ফেলবেন
আরেকটি ভাল অনুশীলন, একাধিক সংযুক্ত ইভেন্টের জন্য একটি নেমস্পেস সেট করা

$("#ID").on ("eventName1.nameSpace", additionalCss, handlerFunction1);
$("#ID").on ("eventName2.nameSpace", additionalCss, handlerFunction2);
// ...
$("#ID").on ("eventNameN.nameSpace", additionalCss, handlerFunctionN);

// and to remove handlerFunction from 1 to N, just use this
$("#ID").off(".nameSpace");

0

আমি এটি হোভার () এর দ্বিতীয় আর্গুমেন্ট (ফাংশন) হিসাবে কাজ করেছি

$('#yourId').hover(
    function(){
        // Your code goes here
    },
    function(){
        $(this).unbind()
    }
});

প্রথম ফাংশন (.hover () এর যুক্তি) হ'ল মাউসওভার এবং আপনার কোডটি কার্যকর করবে। দ্বিতীয় যুক্তি হ'ল মাউসআউট যা # আপনার আইডি থেকে হোভার ইভেন্টটি আবদ্ধ করবে। আপনার কোডটি একবারেই কার্যকর করা হবে।


1
এটি কি $.unbind()নিজের মতো করে object বস্তু থেকে সমস্ত ঘটনা সরিয়ে দেবে না? আপনার $.click()ইভেন্টগুলির মতো জিনিসগুলি এখন ব্যর্থ হবে, তাই না?
অ্যালেক্সিস উইল্কে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.