চেকবক্স ক্লিক ক্লিক করুন কিভাবে ইভেন্ট বুদবুদ বন্ধ


182

আমার একটি চেকবাক্স রয়েছে যা আমি ক্লিক ইভেন্টে কিছু অ্যাজাক্স ক্রিয়া সম্পাদন করতে চাই, তবে চেকবক্সটি একটি কন্টেইনারের অভ্যন্তরে রয়েছে এটির নিজস্ব ক্লিক আচরণ যা চেকবক্সটি ক্লিক করার পরে চালাতে চাই না। এই নমুনাটি আমি কী করতে চাই তা চিত্রিত করে:

$(document).ready(function() {
  $('#container').addClass('hidden');
  $('#header').click(function() {
    if ($('#container').hasClass('hidden')) {
      $('#container').removeClass('hidden');
    } else {
      $('#container').addClass('hidden');
    }
  });
  $('#header input[type=checkbox]').click(function(event) {
    // Do something
  });
});
#container.hidden #body {
  display: none;
}
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<div id="container">
  <div id="header">
    <h1>Title</h1>
    <input type="checkbox" name="test" />
  </div>
  <div id="body">
    <p>Some content</p>
  </div>
</div>

তবে, ডিফল্ট ক্লিক আচরণের (চেকবক্সটি চেক / চেক করা না হওয়া) চালিত না হওয়ার কারণে কীভাবে ইভেন্টটি বুদবুদ বন্ধ করতে হবে তা আমি বুঝতে পারি না।

নিম্নলিখিত দুটিই ইভেন্ট বুদবুদ বন্ধ করে তবে চেকবক্সের স্থিতি পরিবর্তন করে না:

event.preventDefault();
return false;

2
আমি এই বিষয়ে একটি নিবন্ধ পেয়েছি যা অন্যান্য স্ট্যাক ওভারফ্লোয়ারদের জন্য সহায়ক হতে পারে। দ্রুত টিপ: একটি চেকবাক্স ট্রিগার করতে সারণি সারিতে ক্লিক করুন
পেডার রাইস

উত্তর:


340

প্রতিস্থাপন করা

event.preventDefault();
return false;

সঙ্গে

event.stopPropagation();

event.stopPropagation ()

অভিভাবক উপাদানগুলিতে কোনও ইভেন্টের বুদবুদ থামিয়ে দেয়, কোনও প্যারেন্ট হ্যান্ডলারকে ইভেন্ট সম্পর্কে অবহিত হতে বাধা দেয়।

event.preventDefault ()

ডিফল্ট ক্রিয়া সম্পাদন করা থেকে ব্রাউজারকে বাধা দেয়। এই পদ্ধতিটি কখনও ডাকা হয়েছিল কিনা তা জানতে ডিফল্টপ্রিন্টেড পদ্ধতিটি ব্যবহার করুন (event ইভেন্ট অবজেক্টে)।


4
কিছু কারণে এটি আমার পক্ষে কাজ করে না, তবে মিথ্যা ফিরবে।
র্যান্ডি এল

3
আপনি যদি .live()পদ্ধতিটি ব্যবহার করে ইভেন্টটিকে আবদ্ধ করেন তবে এটি কাজ করবে না। আপনাকে return false;নিজেই ব্যবহার করতে হবে।
রাহুল

2
এটি jQuery এর .on()পদ্ধতি ব্যবহার করে কাজ করে (লাইভটি এখন অবহিত করা হয়েছে)। মিথ্যা রিটার্ন কেন কাজ করছে না তা আমি বুঝতে পারি না।
স্টাইল

আমি ইভেন্টটিপ্রেভেন্টডেফল্ট () আই 8-তে চেক চিহ্নটি প্রদর্শন করে না, তবে অন্যান্য ব্রাউজারগুলিতে ভাল কাজ করেছি তা বের করার জন্য আমি বেশ কিছুক্ষণ ব্যয় করেছি। আমি এই উত্তরটি ঠিক করেছি এবং তারপরে কীওয়ার্ড হিসাবে প্রতিরোধের ডিফল্ট, আইই 8, চেকবক্সটি গুগল করে আমাকে এখানে এনেছি।
22:57

এর জন্য কাজ করেনি .. তবে এই দুটি লাইনই (প্রত্যাবর্তন মিথ্যা ছাড়াই) -> ইভেন্ট.প্রিভেন্টডেফল্ট (); event.stopPropagation ();
কুগান কুমার


29

আইই ভুলে যাবেন না:

if (event.stopPropagation) {    // standard
        event.stopPropagation();
    } else {    // IE6-8
        event.cancelBubble = true;
}

23
এই উত্তরটি ২০১২ সালের 2015
টেলান

8
এটি IE9-তেও প্রযোজ্য। আমার আই 99 পরীক্ষা মেশিন স্টপপ্রোপেশন () -তে চিট করে, তবে ক্যান্সেলবল () পছন্দ করে। এবং কিছু লোক / orgs এখনও 2016 সালে আই 9 ব্যবহার করছে, দুঃখের সাথে। কর্পোরেট গ্রাহকদের সাথে আমাদের মধ্যে যারা এটিকে উপেক্ষা করতে পারে না।
ক্রিস কোবার


5

অন্যরা যেমন উল্লেখ করেছে, চেষ্টা করুন stopPropagation()

এবং চেষ্টা করার জন্য একটি দ্বিতীয় হ্যান্ডলার রয়েছে: event.cancelBubble = true;এটি একটি নির্দিষ্ট নির্দিষ্ট হ্যান্ডলার, তবে এটি কমপক্ষে এফএফে সমর্থিত। সত্যিই এটি সম্পর্কে খুব বেশি কিছু জানেন না, কারণ আমি নিজে এটি ব্যবহার করি নি, তবে অন্য সমস্ত ব্যর্থ হলে এটি একটি শটের জন্য মূল্যবান হতে পারে।


5

ইভেন্ট বুদবুদ ধারণাটি বোঝার জন্য এটি একটি দুর্দান্ত উদাহরণ। উপরের উত্তরের উপর ভিত্তি করে, চূড়ান্ত কোডটি নীচের মত বর্ণিত হবে। যেখানে ব্যবহারকারীরা তার মূল উপাদান 'শিরোনাম' এ ইভেন্টের প্রচার চেকবক্সে ক্লিক করলে এটি বন্ধ করা হবে event.stopPropagation();

$(document).ready(function() {
            $('#container').addClass('hidden');
            $('#header').click(function() {
                if($('#container').hasClass('hidden')) {
                    $('#container').removeClass('hidden');
                } else {
                    $('#container').addClass('hidden');
                }
            });
          $('#header input[type=checkbox]').click(function(event) {
              if (event.stopPropagation) {    // standard
                   event.stopPropagation();
               } else {    // IE6-8
                    event.cancelBubble = true;
               }
          });     
  });

5

JQuery ব্যবহার করার সময় আপনার কোনও স্টপ ফাংশনকে আলাদা কল করার দরকার নেই।

আপনি ঠিক ফিরে আসতে পারেন false ইভেন্ট হ্যান্ডলারটিতে

এটি ইভেন্ট বন্ধ করবে এবং বুদবুদ বাতিল করবে ..

এছাড়াও ইভেন্ট.প্রিভেন্টডেফল্ট () বনাম বনাম প্রত্যাখ্যান দেখুন

JQuery ডক্স থেকে:

এই হ্যান্ডলারগুলি, তাই ডেলিগ্রেড হ্যান্ডলারটিকে কল event.stopPropagation()বা ফিরে এসে ট্রিগার করা থেকে বিরত থাকতে পারে false


1

কোডটির জন্য @ মেমরাসকে ক্রেডিট করুন । আমি এটি প্রদর্শনের জন্য একটি স্নিপেট তৈরি করেছি কারণ আমি ভেবেছিলাম যে এটি প্রশংসিত হবে এবং আমি এই বৈশিষ্ট্যটি চেষ্টা করার জন্য একটি অজুহাত চাইছি।

$(document).ready(function() {
  $('#container').addClass('hidden');
  $('#header').click(function() {
    if ($('#container').hasClass('hidden')) {
      $('#container').removeClass('hidden');
    } else {
      $('#container').addClass('hidden');
    }
  });
  $('#header input[type=checkbox]').click(function(event) {
    if (event.stopPropagation) { // standard
      event.stopPropagation();
    } else { // IE6-8
      event.cancelBubble = true;
    }
  });
});
div {
  text-align: center;
  padding: 2em;
  font-size: 1.2em
}

.hidden {
  display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="header"><input type="checkbox" />Checkbox won't bubble the event, but this text will.</div>
<div id="container">click() bubbled up!</div>


কোড যা প্রকৃতপক্ষে ইভেন্টের চলকটি কীভাবে ব্যবহার করতে হয় তা ধন্যবাদ জানায়।
মোশে বিনিলি

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