ক্লিক () ইভেন্ট jquery এ দু'বার কল করছে


113

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

$("#link_button")
.button()
.click(function () {
   $("#attachmentForm").slideToggle("fast");
});

দয়া করে উপদেশ দাও.

ধন্যবাদ।


2
সমস্যাটি সম্ভবত আপনার স্ক্রিপ্টের অন্য কোথাও থেকে এসেছে।
karim79

3
আপনি দু'বার কল করার জন্য কোথায় জিনিস তৈরি করেছেন তা যদি আপনি খুঁজে না পান তবে ক্লিক (...) এর আগে একটি আনবাইন্ড ('ক্লিপ') তৈরি করুন।
রেজিলিও

regilero: ঠিক, পুরো কোড বেসটি খুব বড়। আমি কোথায় এই বাঁধন করা উচিত?
ডোমলাও

2
আপনি কী কী ফাংশনগুলি সেই ক্লিক ইভেন্টটির জন্য বাধ্যতামূলক তা সনাক্ত করতে পারেন: stackoverflow.com/questions/570960/…
আন ফাম

উত্তর:


229

নিশ্চিত হয়ে নিন এবং পরীক্ষা করুন যে আপনি দুর্ঘটনাক্রমে আপনার স্ক্রিপ্টটি আপনার HTML পৃষ্ঠায় দু'বার অন্তর্ভুক্ত করেননি।


1
এটি আমার মামলার সমস্যা ছিল। আমার ক্লিক ইভেন্টটি বুদবুদ হয়ে উঠছিল। পয়েন্টারের জন্য ধন্যবাদ। :) +1
তাহির আকরাম

22
আমি কেবল এই সমাধানটির দিকে চেয়েছিলাম এবং ভেবে হেসেছিলাম "আমি এটি করতে যথেষ্ট বোকা নই" ... দেখা যাচ্ছে যে আমি ঠিক এটি করেছি। অনেক ধন্যবাদ.
জাজিপি

1
ধন্যবাদ! এটি আমার জন্যও সমস্যা হয়ে দাঁড়িয়েছে। এটি একটি লারাভেল ব্লেড টেম্পলেট এবং নেস্টেড টেম্পলেটে ছিল যা একই বিভাগের নামে @ প্যারেন্ট বলে। উফ। আবার ধন্যবাদ!
ফিলিপ হ্যারিংটন

1
এই টিপ জন্য ধন্যবাদ। 20 ঘন্টা ধরে এটির জন্য সংগ্রাম করে এবং এই পরামর্শটি আমাকে সঠিক পথে নিয়ে যায়। আমি এমভিসি স্ক্রিপ্টবান্ডেলগুলি ব্যবহার করছিলাম তবে স্ক্রিপ্ট ফাইলগুলির সাথে সরাসরি লিঙ্ক করছিলাম এবং এটি ইভেন্টগুলিকে নকল করে
মনিশ

হ্যাঁ ... আমি সেখানে এসেছি ... আমি তৃতীয় পক্ষকে দোষ দিচ্ছিলাম, কিন্তু আমিই দুজন .js ফাইলটি যুক্ত করেছি।
জুলিয়ান

76

ক্লিকের আগে আনবাইন্ড তৈরি করুন;

$("#link_button").unbind('click');
$("#link_button")
.button()
.click(function () {
   $("#attachmentForm").slideToggle("fast");
});

1
চেষ্টা করুন $ ("# লিঙ্ক_বাটন")। আনবাইন্ড (); অথবা একাধিকবার যদি কোডটি কতবার পড়া হয় তা পরীক্ষা করার জন্য একটি সাধারণ পরীক্ষা করুন ...
থিস্টিস্ট

3
এটি কেবল প্রতিটি সময় ফ্লাইতে ত্রুটি ঠিক করা, আসল সমাধান নয়। এটি কৌশলটি করে এবং আমাকে সহায়তা করেছে তবে আপনার আসল সমস্যাটি খুঁজে পাওয়া উচিত এবং স্থায়ী সমাধান করা উচিত।
হুয়ান ইগনাসিও 21

1
এটি আমার ক্ষেত্রে সত্যই কার্যকর, কারণ কিছু অজ্যাক্স বলার পরে এটি আমার অত্যধিক ক্লিক হয়ে যাওয়া শুরু হওয়ার পরে আমার ইভেন্টগুলির সাথে কয়েকবার পদ্ধতিগুলি কল করতে হবে (এই শব্দটির অস্তিত্ব আছে কিনা তা আমি জানি না)। আমার পরিস্থিতির জন্য এটি একটি সমাধান বোঝায়।
থিয়াগো সি এস ভেন্তুরা

আমার সমস্যাটি এমন স্ক্রিপ্টের সাথে স্থির করে যা কেবল একবার অন্তর্ভুক্ত ছিল। ধন্যবাদ!
কে রোডা

49

এর অর্থ আপনার কোডটি দু'বার jquery স্ক্রিপ্ট অন্তর্ভুক্ত করেছে। তবে এটি চেষ্টা করুন:

$("#btn").unbind("click").click(function(){

//your code

});

36

আমি চেষ্টা করেছি e.stopImmediatePropagation(),; এটি আমার পক্ষে কাজ করে বলে মনে হচ্ছে।


@ BasheerAL-MOMANI দেখুন stackoverflow.com/questions/5299740/...
fangxing

আপনাকে ধন্যবাদ, এটি কাজ ... পড়ার পরে বোঝার পরে এটি কোনও প্যারেন্ট হ্যান্ডলারকে মৃত্যুদন্ড কার্যকর করা থেকে বিরত রাখে
নন্দলাল উশির

18

আমার ক্ষেত্রে আমি সমস্যাটি কাটিয়ে উঠতে নীচের স্ক্রিপ্টটি ব্যবহার করেছি

$('#id').off().on('click',function(){
    //...
});

off()সমস্ত ইভেন্টের সাথে আবদ্ধ হয় #id। আপনি যদি কেবল clickইভেন্টটি আবদ্ধ করতে চান তবে ব্যবহার করুন off('click')


8

আপনি .on () কল করার ঠিক আগে কল করুন। অফ ()।

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

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

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

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

7

দুটি ক্লিক সমস্যার একটি বরং সাধারণ সমাধান করা হয়

e.stopPropagation()

আপনার ফাংশন শেষে (ধরে নিবেন function(e)যে আপনি এটি ব্যবহার করছেন)। এটি ইভেন্টটি বুদবুদ হওয়া থেকে বাধা দেয় যা ফাংশনটির দ্বিতীয় সম্পাদন হতে পারে।


6

আমারও একই সমস্যা ছিল তবে আপনি এই কোডটি পরিবর্তন করার চেষ্টা করতে পারেন

$("#link_button")
.button()
.click(function () {
   $("#attachmentForm").slideToggle("fast");
});

এটি:

$("#link_button").button();
$("#link_button").unbind("click").click(function () {
   $("#attachmentForm").slideToggle("fast");
});

আমার জন্য, এই কোডটি সমস্যার সমাধান করেছে। তবে দুর্ঘটনাক্রমে আপনার স্ক্রিপ্টটি আপনার HTML পৃষ্ঠায় দুবার অন্তর্ভুক্ত না করার বিষয়ে খেয়াল রাখুন। আমি মনে করি আপনি যদি এই দুটি জিনিস সঠিকভাবে করেন তবে আপনার কোডটি সঠিকভাবে কাজ করবে। ধন্যবাদ


3

এই চেষ্টা করুন

$('#ddlSupervisor').live('change', function (e) {
    if (e.handled !== true) { //this makes event to fire only once
    getEmployeesbySupervisor();
    e.handled = true;
   }
});

আমি "লাইভ" "এ" চালু করেছিলাম এবং এটি আমার পক্ষে কাজ করে বলে মনে হচ্ছে। সুতরাং বাটনটি ক্লিক করা হলে ইভেন্টটি কেবল সময়ের জন্যই জ্বলতে থাকে।
ভিকনেশ্বর

এটি স্পট অন।
লার্জ টুনা

3

এটি অবশ্যই ফায়ারফক্সের সময় বিশেষত একটি বাগ। আমি উপরোক্ত সমস্ত উত্তর চেষ্টা করে অনেক সন্ধান করেছি এবং অবশেষে এটিকে এসও-র বহু বিশেষজ্ঞের দ্বারা এটি বাগ হিসাবে পেয়েছে। সুতরাং, আমি অবশেষে ভেরিয়েবলের মতো ঘোষণা করে এই ধারণাটি নিয়ে এসেছি

var called = false;
$("#ColorPalete li").click(function() {
    if(!called)
    {
             called = true;
             setTimeout(function(){ //<-----This can be an ajax request but keep in mind to set called=false when you get response or when the function has successfully executed.
                 alert('I am called');
                 called = false;
             },3000);

    }
});

এই পদ্ধতিতে এটি প্রথমে পরীক্ষা করে বরং ফাংশনটি আগে বলা হয়েছিল এবং না।



3

এটি একটি পুরানো প্রশ্ন, তবে আপনি যদি ইভেন্টের প্রতিনিধি ব্যবহার করেন তবে এটিই আমার জন্য কারণ।

.delegate-twoএটি সরানোর পরে দু'বার কার্যকর করা বন্ধ হয়ে গেল। আমি বিশ্বাস করি উভয় প্রতিনিধি একই পৃষ্ঠায় উপস্থিত থাকলে এটি ঘটবে।

$('.delegate-one, .delegate-two').on('click', '.button', function() {
    /* CODE */
});

2

কোডের এই স্নিপেটে খারাপ কিছু নেই। এটি আপনার স্ক্রিপ্টের আর একটি অংশ যা @ করিম বলেছিল


2

আমার ক্ষেত্রে এটি ক্রোমে ঠিকঠাক কাজ করছিল এবং IE .click()দু'বার ফোন করছিল । যদি এটি ছিল আপনার সমস্যা, তবে আমি .click()ইভেন্টটি বলার পরে এটি মিথ্যা ফেরত দিয়ে ঠিক করেছিলাম

   $("#txtChat").keypress(function(event) {
        if (event.which == 13) {
            $('#btnChat').click();
            $('#txtChat').val('');
            return false;
        }
    });


2

আমি নিশ্চিত না কেন তবে আমার এই সমস্যাটি ছিল

$(document).on("click", ".my-element", function (e) { });

আমি যখন এটি পরিবর্তন

$(".my-element").click(function () { });

সমস্যার সমাধান হয়েছিল। তবে অবশ্যই আমার কোডে কিছু ভুল।


এটি আমার জন্য লারাভেলে কাজ করেছে, কী কারণে এই সমস্যার কারণ তা জানেন না
খান ফরমান

1

আমি একাধিক আইটেমের সাথে মিলিয়ে একটি নির্বাচন দ্বারা চালিত হয়েছি যাতে প্রতিটি ক্লিক করা হয়েছিল। :firstসাহায্য সহায়তা দিয়েছে,

$('.someClass[data-foo="'+notAlwaysUniqueID+'"]:first').click();

1

আমিও এফএফ এ সমস্যা ছিল। আমার ট্যাগটি অবশ্য একটি <a>ট্যাগের সাথে আবদ্ধ ছিল । যদিও <a>ট্যাগটি কোথাও চলছিল না এটি এখনও ডাবল ক্লিক করে। আমি <a>একটি জন্য ট্যাগ অদলবদল<span> পরিবর্তে এবং ডাবল ক্লিক ইস্যু অদৃশ্য।

অন্য বিকল্প হ'ল href বৈশিষ্ট্যটি সম্পূর্ণরূপে সরিয়ে ফেলা যদি লিঙ্কটি কোথাও না চলে।


এটি আসলে প্রশ্নের উত্তর দেয় না। আপনি কি অন্য কিছু প্রশ্ন থাকে, তাহলে আপনি এটি ক্লিক করে অনুরোধ করতে পারেন প্রশ্ন জিজ্ঞাসা করুন । আপনি এটিও করতে পারেন একটি খয়রাত যোগ একবার আপনি যথেষ্ট আছে এই প্রশ্নের আরো দৃষ্টি আকর্ষণ করতে খ্যাতি
শন প্যাট্রিক ফ্লয়েড

@ সানপ্যাট্রিকফ্লাইড: আসলে, এটি একটি উত্তর। এমনকি যদি লাল পতাকা বাড়াতে প্রস্তুত করা হয়।
উত্সাহক

1

আমি এই সমস্যার মুখোমুখি হয়েছি কারণ আমার $(elem).click(function(){});স্ক্রিপ্টটি একটি ডিভের মধ্যে ইনলাইন স্থাপন করা হয়েছিল যা সেট করা হয়েছিলstyle="display:none;"

যখন সিএসএস প্রদর্শনটি ব্লকের দিকে স্যুইচ করা হয়েছিল, স্ক্রিপ্টটি ইভেন্ট শ্রোতার সাথে দ্বিতীয়বার যুক্ত হবে। আমি স্ক্রিপ্টটিকে একটি পৃথক .js ফাইলে স্থানান্তরিত করেছি এবং সদৃশ ইভেন্ট শ্রোতার আর আরম্ভ করা হয়নি।


1

আমি যখন jquery সহ লোড পৃষ্ঠায় এই পদ্ধতিটি ব্যবহার করি, $('#obj').off('click');ক্লিক ফাংশন সেট করার আগে আমি লিখি , যাতে বুদ্বুদ ঘটে না। আমার জন্য কাজ কর.


1

আমার সহজ উত্তরটি ছিল ক্লিক বাঁধাইটিকে কোনও ফাংশনে পরিণত করা এবং সেই উপাদানটির অনক্লিক থেকে কল করা - একটি ট্রিট কাজ করেছিল! যদিও উপরের কেউই তা করেনি


0

যদি আপনার ইভেন্টটি দু'বার বা তিনবার কল করা হয় বা আরও বেশি, এটি সাহায্য করতে পারে।

আপনি যদি ইভেন্টগুলি ট্রিগার করতে এরকম কিছু ব্যবহার করেন…

$('.js-someclass').click();

… তারপরে .js-someclassপৃষ্ঠাতে আপনার থাকা সংখ্যক উপাদানের দিকে মনোযোগ দিন , কারণ এটি সমস্ত উপাদানগুলির জন্য ক্লিক ইভেন্টটি ট্রিগার করবে - এবং কেবল একবার নয়!

তারপরে একটি সহজ ফিক্স হ'ল প্রথম ক্লিকটি একবারে ক্লিকটি একবার ট্রিগার করা নিশ্চিত করা , উদাহরণস্বরূপ:

$('.js-someclass:first').click();

0

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

আমার অনুরূপ সমস্যা ছিল এবং এটি যাচাই করার জন্য, আমি কেবল console.logআমার স্ক্রিপ্টে একটি কমান্ড যুক্ত করেছি, যেমন নীচের স্নিপেটের মতো:

$("#link_button")
    .button()
    .click(function () {
        console.log("DEBUG: sliding toggle...");
        $("#attachmentForm").slideToggle("fast");
    });

যদি, বোতামটি ক্লিক করার পরে, আপনি আপনার ব্রাউজারের বিকাশকারী কনসোল থেকে নীচের চিত্রের অনুরূপ কিছু পেয়েছি (যেমনটি করেছি), তবে আপনি নিশ্চিতভাবে জানেন যে click()ইভেন্টটি একই বোতামে দু'বার আবদ্ধ হয়েছে।

বিকাশকারীদের কনসোল

আপনার যদি দ্রুত প্যাচ দরকার হয়, তবে ইভেন্টটি আবদ্ধ করার আগে (পুনরায়) ভালভাবে কাজ করার পূর্বে offপদ্ধতিটি নিষিদ্ধ করার unbindজন্য পদ্ধতিটি (বিটিডব্লিউটি jQuery 3.0 থেকে অবচিত করা হয়েছে) ব্যবহারের অন্যান্য ভাষ্যকারদের দ্বারা প্রস্তাবিত সমাধানটি প্রস্তাবিত হয়েছে:

$("#link_button")
    .button()
    .off("click")
    .click(function () {
        $("#attachmentForm").slideToggle("fast");
    });

দুর্ভাগ্যক্রমে, এটি কেবল একটি অস্থায়ী প্যাচ! একবার আপনাকে বসকে খুশি করার সমস্যাটি সমাধান হয়ে গেলে আপনার কোডটি সত্যই আরও কিছুটা খনন করা উচিত এবং "নকল বাঁধাই" সমস্যাটি ঠিক করা উচিত।

আসল সমাধান অবশ্যই আপনার নির্দিষ্ট ব্যবহারের ক্ষেত্রে নির্ভর করে। আমার ক্ষেত্রে, উদাহরণস্বরূপ, "প্রসঙ্গ" এর সমস্যা ছিল। আমার ফাংশনটি ডকুমেন্টের নির্দিষ্ট অংশে প্রয়োগ করা একটি অজ্যাক্স কলটির ফলস্বরূপ আহ্বান করা হয়েছিল: পুরো ডকুমেন্টটি পুনরায় লোড করা আসলে "পৃষ্ঠা" এবং "উপাদান" উভয় প্রসঙ্গেই পুনরায় লোড করা হয়েছিল, ফলস্বরূপ ইভেন্টটি দুবার উপাদানটির সাথে আবদ্ধ ছিল ।

এই সমস্যার আমার সমাধান jQuery এর সুবিধা গ্রহণার্থে ছিল এক ফাংশন, যা হিসাবে একই উপর ব্যতিক্রম যে ঘটনা তার প্রথম আবাহন পর স্বয়ংক্রিয়ভাবে আনবাউন্ড সঙ্গে। এটি আমার ব্যবহারের ক্ষেত্রে আদর্শ ছিল তবে আবার এটি অন্য ব্যবহারের ক্ষেত্রে সমাধান নাও হতে পারে।


-1

একই সমস্যা ছিল। এটি আমার পক্ষে কাজ করেছে -

$('selector').once().click(function() {});

আশা করি এটি কাউকে সাহায্য করবে।


আমার জন্য একটি ত্রুটি ছুঁড়েছে ... প্লাস এটি একটি নোংরা সমাধান - ফাংশনটি একাধিকবার পরিচালিত হচ্ছে, সমাধানটি অন্য কোথাও রাখা এবং জিনিসগুলি নিরীক্ষণের জন্য কনসোল.লগ () ব্যবহার করা।
টাইলার 14

-1

আমার ক্ষেত্রে, এইচটিএমএলটি এইভাবে তৈরি করা হয়েছিল:

<div class="share">
  <div class="wrapper">
    <div class="share">
    </div>
  </div>
</div>

এবং আমার jQuery এর মত ছিল:

jQuery('.share').toggle();

এটি আমাকে বিভ্রান্ত করেছে কারণ কিছুই ঘটছে বলে মনে হচ্ছে না। সমস্যাটি ছিল যে অভ্যন্তরীণ .shareগুলি toggle বাইরের .shareগুলি বাতিল করে দেবে toggle


-1

আমি উপাদান ধরণের পরিবর্তন করে এই সমস্যার সমাধান করেছি। বোতামের পরিবর্তে আমি ইনপুট রাখি এবং এই সমস্যাটি বেশি ঘটে না।

অন্তর্নিহিত:

<button onclick="doSomthing()">click me</button>

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

<input onclick="doSomthing()" value="click me">
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.