jQuery ক্লিক ইভেন্টগুলি একাধিকবার গুলি ছোঁড়াচ্ছে


283

আমি জাভাস্ক্রিপ্টে একটি ভিডিও পোকার গেমটি এর বেসিকগুলি নীচে নামার উপায় হিসাবে লেখার চেষ্টা করছি এবং আমি এমন একটি সমস্যায় পড়েছি যেখানে jQuery ক্লিক ইভেন্ট হ্যান্ডলাররা একাধিকবার গুলি চালাচ্ছে।

বাজি রাখার জন্য তারা বোতামগুলির সাথে সংযুক্ত রয়েছে, এবং এটি গেমের সময় প্রথম দিকে বাজি রাখার জন্য দুর্দান্ত কাজ করে (কেবল একবার গুলি চালানো); তবে দ্বিতীয় হাতের জন্য বাজি ধরতে, প্রতিবার বাজি বা জায়গার বাজি বোতামটি টিপলে ক্লিক ইভেন্টটিকে দু'বার বার করে দেওয়া হয় (যাতে প্রতিটি প্রেসের জন্য দ্বিগুণ পরিমাণের পরিমাণ বাজি হয়)। সামগ্রিকভাবে, একবার বাজি বাটনটি টিপানোর সময় ক্লিক ইভেন্টটি বহিস্কার হওয়ার জন্য এটি এই প্যাটার্নটি অনুসরণ করে - যেখানে ক্রমিকের আইথ টার্মটি খেলার শুরু থেকেই আইথ হাতের পণের জন্য: 1, 2, 4 , 7, 11, 16, 22, 29, 37, 46, যা কিছু মূল্য হিসাবে এন (এন + 1) / 2 + 1 বলে মনে হচ্ছে - এবং আমি এটি নির্ধারণের জন্য যথেষ্ট স্মার্ট ছিলাম না, আমি OEIS ব্যবহার করেছি । :)

এখানে ক্লিক করা ইভেন্ট হ্যান্ডলারগুলির সাথে ফাংশন যা অভিনয় করছে; আশা করি এটি বোঝা সহজ (যদি না হয় তবে আমাকে জানান, আমি আরও ভাল হতে চাই):

/** The following function keeps track of bet buttons that are pressed, until place button is pressed to place bet. **/
function pushingBetButtons() {
    $("#money").text("Money left: $" + player.money); // displays money player has left

    $(".bet").click(function() {
        var amount = 0; // holds the amount of money the player bet on this click
        if($(this).attr("id") == "bet1") { // the player just bet $1
            amount = 1;
        } else if($(this).attr("id") == "bet5") { // etc.
            amount = 5;
        } else if($(this).attr("id") == "bet25") {
            amount = 25;
        } else if($(this).attr("id") == "bet100") {
            amount = 100;
        } else if($(this).attr("id") == "bet500") {
            amount = 500;
        } else if($(this).attr("id") == "bet1000") {
            amount = 1000;
        }
        if(player.money >= amount) { // check whether the player has this much to bet
            player.bet += amount; // add what was just bet by clicking that button to the total bet on this hand
            player.money -= amount; // and, of course, subtract it from player's current pot
            $("#money").text("Money left: $" + player.money); // then redisplay what the player has left
        } else {
            alert("You don't have $" + amount + " to bet.");
        }
    });

    $("#place").click(function() {
        if(player.bet == 0) { // player didn't bet anything on this hand
            alert("Please place a bet first.");
        } else {
            $("#card_para").css("display", "block"); // now show the cards
            $(".card").bind("click", cardClicked); // and set up the event handler for the cards
            $("#bet_buttons_para").css("display", "none"); // hide the bet buttons and place bet button
            $("#redraw").css("display", "block"); // and reshow the button for redrawing the hand
            player.bet = 0; // reset the bet for betting on the next hand
            drawNewHand(); // draw the cards
        }
    });
}

আপনার যদি কোনও ধারণা বা পরামর্শ থাকে বা আমার সমস্যার সমাধান এখানে অন্য সমস্যার সমাধানের মতো হয় তবে দয়া করে আমাকে জানান (আমি অনেক একই ধরণের শিরোনামযুক্ত থ্রেডগুলিতে দেখেছি এবং কাজ করতে পারে এমন কোনও সমাধান খুঁজে পাওয়ার ভাগ্য নেই আমার জন্য).


var amount = parseInt(this.id.replace(/[^\d]/g,''),10);এবং যদি আপনি কোনও উপাদানের একই সম্পত্তি একবারে একবারে ক্যাশে করে থাকেন তবে এটি সন্ধান করবেন না। চেহারা ব্যয়বহুল।
ডেভিড মনিকাকে

প্রতিক্রিয়া এবং ক্যাশে বৈশিষ্ট্য সম্পর্কে টিপস জন্য আপনাকে ধন্যবাদ। আমি প্লেয়ার.মনি এবং প্লেয়ার.বেটকে স্থানীয় ভেরিয়েবলের অর্থের জন্য সেট করেছিলাম এবং সেই ফাংশনের অভ্যন্তরে বাজি রেখেছি এবং পরিবর্তে সেইগুলিকেই হেরফের করেছিলাম, এবং আমার কোডের বাকীটিও এটির জন্য পরিবর্তন করে দেব you :) যদি আপনার কাছে সময় থাকে তবে আপনি কি আপনার পরামর্শ মতো ব্যাখ্যা করতে পারতেন? পরিমাণের সূচনা করছে; এটি কিছু নিয়মিত প্রকাশের মতো লাগে তবে আমি সহজেই এটি উপলব্ধি করতে পারি না।
গ্রেগরি ফোলার

@ গ্রেগরিফাউলার - আপনার প্রশ্নের সাথে সম্পর্কিত নয়, তবে ... একটি জাভাস্ক্রিপ্ট স্যুইচ বিবৃতি সন্ধানের জন্য উপযুক্ত হতে পারে।
ক্লেটন

2
ম্যান, আপনার ফাংশনটি প্রতিবার এটি ক্লিক করা হলে একটি ক্লিক হ্যান্ডলার রাখে। আপনি যদি প্রতিটি রাউন্ডে এটি প্রার্থনা করেন তবে রাউন্ড দুই এ আপনার দুটি হ্যান্ডলার রয়েছে have প্রতিটি হ্যান্ডলার তার কাজ করে এবং 100 রাউন্ডে আপনি 100 সতর্কতা পান get
মার্কো ফাউস্টিনেলি

এটি ঘটে কারণ আপনার কোডের কোথাও, আপনি ইভেন্ট হ্যান্ডলারটিকে প্রথমে আবদ্ধ না করে পুনরায় রিমান্ড করছেন। একটি অনুরূপ দৃশ্য এবং একটি ভাল ব্যাখ্যা জন্য এই প্রশ্ন দেখুন ।
jpaugh

উত্তর:


526

একবার ক্লিকের ক্রিয়াগুলি একবার এটি ব্যবহার করে তা নিশ্চিত করতে:

$(".bet").unbind().click(function() {
    //Stuff
});

31
ঠিক আছে, আপনি গতকাল কোথায় ছিলেন, রব? ;) আমি ঠিক এটিই সন্ধান করছিলাম, কেন জানি না কেন আমি এটি আগে খুঁজে পাইনি। তবে এটি ছদ্মবেশে এখনও আশীর্বাদ ছিল কারণ আমি প্রচুর অন্যান্য জিনিস শিখেছি।
গ্রেগরি ফোলার

1
;) দুঃখিত আমি এটির উপরও কয়েকদিন আমার চাকা ঘুরিয়ে দিয়েছি। কেন এটি প্রথম স্থানে ঘটে তা এখনও আমি একটি যুক্তিসঙ্গত কারণ অনুসন্ধান করছি।
রব

6
মানুষ এত কিছু করার পরে এটি করেছে। আমার ক্ষেত্রে ব্যতীত আমি সমতুল্য ব্যবহার করেছি: $ ("। বাজি")। অফ ()। চালু ()
ম্যাডটুরকি

7
যেমন নীচে jroi_web বলেছে, এই পদ্ধতিটি অবচয় করা হয়েছে। আরও সাম্প্রতিক সমাধানের জন্য @ ট্রোলের উত্তর দেখুন।
পাসকাল

একটি ক্লিক হ্যান্ডলার কোনও একক ছাড়াই জিনিস নয়। বিশেষত যখন এটি ভারী হয় যদি-যদি-তবে প্রশ্নের মধ্যে দেখানো হয়। আপনার এটিকে সংযুক্ত করার কথা রয়েছে এবং পৃষ্ঠাটি যতক্ষণ বেঁচে থাকবে ততক্ষণ এটিকে কাজ করতে দেবে।
মার্কো ফাউস্টিনেলি

378

.unbind()অবচয় করা হয়েছে এবং .off()পরিবর্তে আপনার পদ্ধতিটি ব্যবহার করা উচিত । .off()আপনি কল করার আগে কেবল কল করুন.on()

এটি সমস্ত ইভেন্ট হ্যান্ডলারগুলি সরিয়ে দেবে:

$(element).off().on('click', function() {
    // function body
});

নিবন্ধিত 'ক্লিক' ইভেন্ট হ্যান্ডলারগুলি কেবল সরাতে:

$(element).off('click').on('click', function() {
    // function body
});


একটি যাদুমন্ত্র মত কাজ করে! আমার ফাংশন একবার ক্লিক করলে চলবে, তারপরে দুবার, চারবার ... .ऑফ () এর আগে .on () এই সমস্যার সমাধান করে।
জাম্পঅনকম্যান্ড

146

.এক()

আরও ভাল বিকল্পটি হ'ল .one():

হ্যান্ডলারটি ইভেন্টের টাইপ অনুযায়ী উপাদান হিসাবে একবারে সম্পাদিত হয়।

$(".bet").one('click',function() {
    //Your function
});

একাধিক ক্লাস এবং প্রতিটি ক্লাসের ক্ষেত্রে একবার ক্লিক করা দরকার,

$(".bet").on('click',function() {
    //Your function
    $(this).off('click');   //or $(this).unbind()
});

8
সেরা উত্তর, আপনি আমাকে একটি মূর্খ হ্যাক থেকে বাঁচিয়েছেন, এটি অনেক বেশি ভাল কারণ এটি যদি আপনার onclickএকই উপাদানটিতে একাধিক ইভেন্ট হয় তবে বিভিন্ন স্থানে এটি unbind()off()onclick
বাকীগুলিকে

3
সমস্ত উত্তর চেষ্টা করার পরে, এই একটাই আমার জন্য একমাত্র কাজ।
নেভার্সন

10
একটি বিষয় লক্ষণীয়, আপনি যদি ফাংশনটি কেবল একবার ক্লিক করে আগুন জ্বলতে চান তবে পরবর্তী ক্লিকগুলিতে গুলি চালিয়ে যেতে চান তবে এটি পৃষ্ঠায় আজীবনের জন্য কেবল আক্ষরিক অর্থে একবার আগুন নেবে। সুতরাং বন্ধ ()। অন () পদ্ধতি সহ এমটিএল এর উত্তর ব্যবহার করা প্রয়োজন।
ডেরেক হিউট

1
@ মুনচেসচেয়ার, এর একাধিক কারণ থাকতে পারে। একে অপরের ভিতরে একই শ্রেণি সহ একাধিক উপাদান। অথবা একটি ক্লিক হ্যান্ডলার এক পুনরাবৃত্তিতে একাধিকবার নিবন্ধিত হয়।
শৌনক ডি

3
আমার পক্ষে কাজ করছেন না - এখনও একাধিক ক্লিক ফিরিং - আইডি সহ কেবলমাত্র 1 টি বোতাম উপাদান রয়েছে এবং কেবল 1 টি ইভেন্ট আটকে রয়েছে (ক্লিক ইভেন্ট) no আমি ভেবেছিলাম এটি একটি jQuery বাগ, তবে এটি সম্ভবত একটি বুটস্ট্র্যাপ মডেল-ডায়ালগ বাগ।
MC9000

78

আপনি যদি ওফ () .উনবাইন্ড () বা। স্টপপ্রোপেশন () এখনও আপনার নির্দিষ্ট সমস্যাটি সমাধান না করে থাকেন তবে .stopImediaPropagation () ব্যবহারের চেষ্টা করুন যখন আপনি কেবল চান যে আপনার ইভেন্টটি কোনও বুদবুদ ছাড়াই এবং পরিচালনা ছাড়াই পরিচালনা করা যায় situations ইতোমধ্যে হ্যান্ডেল হওয়া অন্যান্য ইভেন্টগুলিকে প্রভাবিত করছে। কিছুটা এইরকম:

$(".bet").click(function(event) {
  event.stopImmediatePropagation();
  //Do Stuff
});

কৌতুক করে!


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

1
বা আপনি যদি কিছু বৈশ্বিক পরিবর্তনশীলকে jQuery UI ডায়ালগ রেন্ডার করার আগে 16 এর মান নির্ধারণ করে থাকেন, যা পরে বলে, 55 বলে পরিবর্তিত হয়েছে, তবে 16 টি jQuery UI ডায়ালগ ইভেন্ট হ্যান্ডলারের সেই বৈশ্বিক চলকটির জন্য প্রদর্শিত হবে, এমনকি যদি সেই সময়ে এটি হয় 16 টি আর নেই So
ইউক্রেন ট্রেন

খুব নির্দিষ্ট পরিস্থিতির জন্য যা বর্ণনা করা এমনকি কঠিন। এটি ঠিক যেমনটি আপনি বলেছেন ঠিক তেমন কাজ করে: "অন্য কোনও ইভেন্টকে প্রভাবিত না করেই কাজ করে"। ধন্যবাদ! :)
টমস বুগনা

আমার জন্য সম্পূর্ণ সূক্ষ্ম কাজ করে। ধন্যবাদ!
সোমনাথ পাওয়ার

18

আপনি যদি প্রতিটি "ক্লিক" করে সেই ফাংশনটি কল করে থাকেন, তবে এটি প্রতিটি কলটিতে আরও এক জোড়া হ্যান্ডলার যুক্ত করছে।

JQuery এর সাথে হ্যান্ডলার যুক্ত করা "অনক্লিক" বৈশিষ্ট্যের মান সেট করার মতো নয়। একজনের ইচ্ছা হিসাবে যতগুলি হ্যান্ডলার যোগ করতে পারেন।


4
আপনার উত্তর আমাকে সঠিক দিকে নিয়ে গেছে এবং আমি অনেক কিছু শিখেছি, তবে দুর্ভাগ্যক্রমে jQuery ব্যবহার করে আমার সমস্যা সমাধান করার পক্ষে যথেষ্ট নয়। :) আমি অন / অফ, লাইভ (এবং ডেলিগেট) / ডাই এবং একটি ব্যবহার করার চেষ্টা করেছি এবং তারপরে অ্যাডভেন্টলিস্টনার / রিমুভেরেন্টলাইস্টনার ব্যবহার করেছি, তবে হ্যান্ডলারের ক্ষতিকারক বৃদ্ধির গতিটি আমি সবচেয়ে বেশি করতে পেরেছিলাম। আমি অবশেষে আপাতত অন্লিক দিয়ে আমার সমস্যাটি সমাধান করেছি। তবে আমি এখনও আপনার উত্তর থেকে জাভাস্ক্রিপ্টের ইভেন্টের মডেল, যেমন ক্যাপচারিং / বুদবুদ সম্পর্কে অনেক কিছু শিখলাম, তাই আমি এটির প্রশংসা করি। ধন্যবাদ. :)
গ্রেগরি ফওলার

আপনাকে অনেক ধন্যবাদ, আমি বিশ্বাস করতে পারি না আমি এটি জানতাম না!
লেনি

12

ইভেন্টটি একাধিকবার অগ্নিসংযোগ করবে যখন এটি একাধিকবার নিবন্ধিত হবে (এমনকি একই হ্যান্ডলারের কাছে থাকলেও)।

যেমন $("ctrl").on('click', somefunction) যদি এই অংশটি প্রতিবার পৃষ্ঠাটি আংশিক সতেজ করা হয় তখন সম্পাদিত হয়, ইভেন্টটিও প্রতিবার নিবন্ধিত হচ্ছে। সুতরাং সিটিআরএল শুধুমাত্র একবার ক্লিক করা হলেও এটি একাধিকবার "সামান্য ফাংশন" চালাতে পারে - এটি কতবার চালিত হয় তার উপর নির্ভর করে এটি কতবার নিবন্ধিত হয়েছিল।

এটি জাভাস্ক্রিপ্টে নিবন্ধিত যে কোনও ইভেন্টের জন্য সত্য।

সমাধান:

একবার "অন" কল করতে নিশ্চিত করুন।

এবং কোনও কারণে যদি আপনি আর্কিটেকচারটি নিয়ন্ত্রণ করতে না পারেন তবে এটি করুন:

$("ctrl").off('click'); $("ctrl").on('click', somefunction);


আপনি সত্যিই কি বলতে চান?
সোমনাথ খরত

এটি এই ক্ষেত্রে কী চলছে তা ব্যাখ্যা করে না। বোতামটির একটি অনন্য আইডি রয়েছে এবং কেবলমাত্র 1 টি ইভেন্ট (এটি একাধিকবার বলা হচ্ছে না, কারণ এটি কেবল একবার ক্লিক করা যেতে পারে)। এটি একটি বাগ যা কেবল jQuery ডায়ালগ বাক্সগুলিতে প্রদর্শিত হয় (এবং পুনরুত্পাদন করা খুব সহজ)।
MC9000

2
আমরা জানি না যে "পুশিংবেটস" ফাংশনটি কেবল একবার বা একাধিকবার বলা হয়েছে কিনা .. যদি একাধিকবার ইভেন্টটি একাধিকবার নিবন্ধিত হওয়ার চেয়ে বেশি বলা হয় এবং তাই এটি একাধিকবারে গুলি চালিয়ে যাবে..যদিও একবার বোতামটি ক্লিক করা হয় তবে ।
কল্পনা পোপাত

4

মার্কআপের কারণে আমার সমস্যা হয়েছিল।

এইচটিএমএল:

<div class="myclass">
 <div class="inner">

  <div class="myclass">
   <a href="#">Click Me</a>
  </div>

 </div>
</div>

jQuery এর

$('.myclass').on('click', 'a', function(event) { ... } );

আপনি খেয়াল করেছেন আমার এইচটিএমএলে দু'বার একই ক্লাসের 'মাইক্লাস' রয়েছে, সুতরাং এটি ডিভের প্রতিটি উদাহরণের জন্য ক্লিক করে।


3

ভাল বিকল্প বন্ধ ব্যবহার করা হবে

<script>
function flash() {
  $("div").show().fadeOut("slow");
}
$("#bind").click(function() {
  $( "body" )
    .on("click", "#theone", flash)
    .find("#theone")
      .text("Can Click!");
});
$("#unbind").click(function() {
  $("body")
    .off("click", "#theone", flash)
    .find("#theone")
      .text("Does nothing...");
});
</script>

3

.On () এবং .one () সম্পর্কে সমস্ত জিনিস দুর্দান্ত এবং jquery দুর্দান্ত।

তবে কখনও কখনও আপনি এটি আরও কিছুটা সুস্পষ্ট হয়ে উঠতে চান যে ব্যবহারকারীর ক্লিক করার অনুমতি নেই, এবং এই ক্ষেত্রে আপনি এরকম কিছু করতে পারেন:

function funName(){
    $("#orderButton").prop("disabled", true);
    //  do a bunch of stuff
    // and now that you're all done
    setTimeout(function(){
        $("#orderButton").prop("disabled",false);
        $("#orderButton").blur();
    }, 3000);
}

এবং আপনার বোতামটি দেখতে এমন হবে:

<button onclick='funName()'>Click here</button>

1
এটি ব্যবহারকারীর ক্ষেত্রে একাধিকবার ক্লিক করার ক্ষেত্রে সমাধান হবে তবে ... আমি একই টাইমস্ট্যাম্পের সাথে একাধিক ক্লিক ইভেন্ট পাচ্ছি। আমি একই মিলিসেকেন্ডে 3 বার ক্লিক করার কোনও উপায় নেই, এমনকি যদি আমি এটিতে খুব দ্রুত ছিলাম (এবং কীভাবে আমি বোতামটি টিপছি যে কতবার অজানা)।
jpaugh

2

নির্দিষ্ট ইভেন্টটি একই উপাদানটির সাথে একাধিকবার আবদ্ধ হওয়ার কারণে এটি ঘটে।

যে সমাধানটি আমার পক্ষে কাজ করেছে তা হ'ল:

ব্যবহার করে সংযুক্ত সমস্ত ইভেন্টকে হত্যা করুন .die()পদ্ধতি ।

এবং তারপরে আপনার পদ্ধতি শ্রোতাদের সংযুক্ত করুন।

সুতরাং,

$('.arrow').click(function() {
// FUNCTION BODY HERE
}

হতে হবে:

$('.arrow').die("click")
$('.arrow').click(function() {
// FUNCTION BODY HERE
}

2

stopPropagation()ক্লিকগুলি এড়ানোর জন্য আমাদের অবশ্যই অবশ্যই ইভেন্টগুলি বহুবার ট্রিগার করে।

$(this).find('#cameraImageView').on('click', function(evt) {
   evt.stopPropagation();
   console.log("Camera click event.");
});

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

event.isPropagationStopped()এই পদ্ধতিটি কখনও ডাকা হয়েছিল কিনা তা আমরা নির্ধারণ করতে ব্যবহার করতে পারি (সেই ইভেন্টের উপরে)।

এই পদ্ধতিটি ট্রিগার () সহ ট্রিগারযুক্ত কাস্টম ইভেন্টগুলির জন্যও কাজ করে। দ্রষ্টব্য যে এটি একই উপাদানটির অন্যান্য হ্যান্ডলারদের চলমান থেকে আটকাবে না।


2

আমার ক্ষেত্রে আমি 'প্রতিনিধি' ব্যবহার করছিলাম, সুতরাং এর সমাধানগুলির কোনওটিই কাজ করে না। আমি বিশ্বাস করি যে এটি বোতামটি এজ্যাক্স কলগুলির মাধ্যমে একাধিকবার প্রদর্শিত হয়েছিল যা একাধিক ক্লিকের সমস্যা তৈরি করেছিল। সমাধানগুলি একটি সময়সীমা ব্যবহার করে তাই কেবলমাত্র সর্বশেষ ক্লিকটি স্বীকৃত হয়:

var t;
$('body').delegate( '.mybutton', 'click', function(){
    // clear the timeout
    clearTimeout(t);
    // Delay the actionable script by 500ms
    t = setTimeout( function(){
        // do something here
    },500)
})



1

পৃষ্ঠার জীবদ্দশায় একবারে কেবল আগুন জ্বলে

সুতরাং আপনি যদি বৈধতা করতে চান তবে এটি সঠিক সমাধান নয়, কারণ যখন আপনি বৈধতার পরে পৃষ্ঠাটি ছাড়েন না, আপনি কখনই ফিরে আসবেন না। ব্যবহার করা ভাল

$(".bet").on('click',function() 
{ //validation 
   if (validated) { 
      $(".bet").off('click'); //prevent to fire again when we are not yet off the page
      //go somewhere
    }
});

1

আমি যখন এই সমস্যাটি মোকাবেলা করি তখন আমি সর্বদা ব্যবহার করি:

$(".bet").unbind("click").bind("click", function (e) {
  // code goes here
}

এইভাবে আমি একই স্ট্রোকে আনবাইন্ড এবং রিব্যান্ড করি।


0

https://jsfiddle.net/0vgchj9n/1/

ইভেন্টটি সর্বদা কেবল একবার জ্বলতে থাকে তা নিশ্চিত করার জন্য, আপনি Jquery .one () ব্যবহার করতে পারেন। JQuery এক নিশ্চিত করে যে আপনার ইভেন্ট হ্যান্ডলারটি কেবল একবার ডেকেছে। অতিরিক্তভাবে, আপনি যখন বর্তমান ক্লিক অপারেশনটির প্রক্রিয়া শেষ করেছেন তখন আপনি আরও ক্লিকের অনুমতি দেওয়ার জন্য আপনার ইভেন্ট হ্যান্ডলারটির সাথে সদস্যতা নিতে পারেন।

<div id="testDiv">
  <button class="testClass">Test Button</button>
</div>

...

var subscribeClickEvent = function() {$("#testDiv").one("click", ".testClass", clickHandler);};

function clickHandler() {
  //... perform the tasks  
  alert("you clicked the button");
  //... subscribe the click handler again when the processing of current click operation is complete  
  subscribeClickEvent();
}

subscribeClickEvent();


0

আমার ক্ষেত্রে, অনক্লিক ইভেন্টটি একাধিকবার গুলি চালিয়ে যাচ্ছিল আমি তুলনামূলকভাবে জেনেরিক ইভেন্ট হ্যান্ডলারটি তৈরি করেছিলাম

  `$('div').on("click", 'a[data-toggle="tab"]',function () {
        console.log("dynamic bootstrap tab clicked");
        var href = $(this).attr('href');
        window.location.hash = href;
   });`

পরিবর্তন

    `$('div#mainData').on("click", 'a[data-toggle="tab"]',function () {
        console.log("dynamic bootstrap tab clicked");
        var href = $(this).attr('href');
        window.location.hash = href;
    });`

এবং স্থির ট্যাব ক্লিকের জন্য স্ট্যাটিক এবং গতিশীল ক্লিকগুলির জন্য পৃথক হ্যান্ডলারগুলিও তৈরি করতে হবে

    `$('a[data-toggle="tab"]').on("click",function () {
        console.log("static bootstrap tab clicked");
        var href = $(this).attr('href');
        window.location.hash = href;
    });`

0

আমার ক্ষেত্রে আমি একই *.jsফাইলটি একটি <script>ট্যাগে পৃষ্ঠাতে দুবার লোড করেছি , সুতরাং উভয় ফাইলই উপাদানটির সাথে ইভেন্ট হ্যান্ডলারের সংযুক্ত ছিল। আমি সদৃশ ঘোষণাটি সরিয়েছি এবং এটি সমস্যার সমাধান করেছে।


0

আর একটি সমাধান আমি খুঁজে পেয়েছি এটি ছিল, যদি আপনার একাধিক ক্লাস থাকে এবং লেবেলে ক্লিক করার সময় রেডিও বোতামগুলির সাথে কাজ করে।

$('.btn').on('click', function(e) {
    e.preventDefault();

    // Hack - Stop Double click on Radio Buttons
    if (e.target.tagName != 'INPUT') {
        // Not a input, check to see if we have a radio
        $(this).find('input').attr('checked', 'checked').change();
    }
});

0

গতিশীলভাবে উত্পন্ন লিঙ্কটি নিয়ে আমার এই সমস্যাটি ছিল:

$(document).on('click', '#mylink', function({...do stuff...});

আমি প্রতিস্থাপন পাওয়া documentসঙ্গে 'body'আমার জন্য সমস্যা সমাধান করা হয়েছে:

$('body').on('click', '#mylink', function({...do stuff...});


0

আনবাইন্ড () কাজ করে তবে ভবিষ্যতে এটি অন্যান্য সমস্যার কারণ হতে পারে। হ্যান্ডলারটি যখন অন্য হ্যান্ডলারের অভ্যন্তরে থাকে তখন একাধিকবার ট্রিগার করে, তাই আপনার হ্যান্ডলারের বাইরে রাখুন এবং যদি আপনি হ্যান্ডলারের মানগুলি বাসা বেঁধে রাখতে চান তবে তাদের একটি বৈশ্বিক পরিবর্তনশীল হিসাবে নির্ধারণ করুন যে এটি আপনার হ্যান্ডলারের অ্যাক্সেসযোগ্য হবে।



-1

একাধিক মাউস ক্লিক ট্রিগার ইভেন্টগুলি একাধিকবার হ্যান্ডেল করতে নীচের কোডটি আমার চ্যাট অ্যাপ্লিকেশনে আমার জন্য কাজ করেছিল। if (!e.originalEvent.detail || e.originalEvent.detail == 1) { // Your code logic }

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