উত্তর:
আপনি যদি এটি প্রয়োগ করতে পারেন তবে সম্ভবত আপনার ইভেন্টের মধ্যে ইভেন্ট.প্রিভেন্টডাফল্ট এবং ইভেন্ট.স্টপ প্রোপাগেশন বা প্রতি মুহুর্তে আবদ্ধ এবং আবদ্ধ থাকতে চান like
function someMethod()
{
$(obj).off('click').on('click', function(e) {
// put your logic in here
});
}
function someMethod() { $(obj).off('click.namespace').on('click.namespace', function {}); }
পিএনএর উত্তর ছাড়াও আপনি নিজের ইভেন্টটির নাম সরিয়ে দেওয়ার বিষয়ে ভাবতে চাইতে পারেন যাতে আপনি দুর্ঘটনাক্রমে সমস্ত ক্লিক ইভেন্টগুলি আবদ্ধ না করে যান।
কিছু মেথড () function
obj (অবজেক্ট) .উনবাইন্ড ('ক্লিক.নেমস্পেস')। বাইন্ড ('ক্লিক.নেমস্পেস', ফাংশন () {});
}
$(obj).off()এবং হওয়া উচিত $(obj).on()। অন্যথায়, নেমস্পেসিং সাহায্য করেছে এবং এটি কাজ করে। ধন্যবাদ!
আপনি ইতিমধ্যে এই নির্দিষ্ট ফাংশনটি আবদ্ধ করেছেন কিনা তা নির্ধারণের জন্য পদ্ধতিতে কোনও অন্তর্নির্মিত নেই। আপনি কোনও বস্তুতে একাধিক ক্লিক ফাংশনগুলিকে আবদ্ধ করতে পারেন। উদাহরণ স্বরূপ:
$('#id').bind('click', function(){
alert('hello');
});
$('#id').bind('click', function(){
alert('goodbuy');
});
আপনি যদি উপরের জিনিসটি ক্লিক করেন তখন এটি হ্যালো সতর্ক করবে তারপর বিদায়। ক্লিক ইভেন্টের জন্য কেবলমাত্র একটি ফাংশন আবদ্ধ কিনা তা নিশ্চিত করতে ক্লিক ইভেন্ট হ্যান্ডলারটিকে আনবাইন্ড করুন তারপর পছন্দসই ফাংশনটি এইভাবে আবদ্ধ করুন:
$(obj).unbind('click').bind('click', function(){... });
সুস্পষ্ট সমাধান হ'ল someMethod()দু'বার কল না করা। যদি আপনি এটি ঠিক করতে না পারেন তবে আপনি একটি রাষ্ট্র পরিবর্তনশীল রাখতে পারেন যাতে এটি কেবল একবারের মতো এইভাবে আবদ্ধ হয়:
function someMethod()
{
if (!someMethod.bound) {
$(obj).click(function() {});
someMethod.bound = true;
}
}
দ্রষ্টব্য: এটি সীমাবদ্ধ কিনা তা ট্র্যাক রাখতে বিশ্বব্যাপী ভেরিয়েবল প্রবর্তন না করে নিজেই এই ফাংশনটির একটি সম্পত্তি ব্যবহার করে। আপনি বস্তুতে নিজেই একটি সম্পত্তি ব্যবহার করতে পারেন।
আপনি এটি এখানে কাজ করতে দেখতে পারেন: http://jsfiddle.net/jfriend00/VHkxu/ ।
অথবা jQuery এর একটি () ফাংশনটি ব্যবহার করুন যা () এর সাথে সাদৃশ্যযুক্ত তবে কেবল একবারে ইভেন্টটি ছড়িয়ে দেয়, এমনকি আপনি যদি একাধিকবার আবদ্ধ হন।
jQuery কেবল একবারে খুব সহজ কিছু ফাংশন কল করা সম্ভব করে তোলে:
function someMethod()
{
$(obj).click(function() {});
this.someMethod = $.noop;
}
jQuery.noopএর চেয়ে কেবল একটি চরিত্রই ছোট function(){}, তাই এটি নির্দোষ বলে যে এটি এখানে "সহায়তা" করছে, কেবল একটি খালি ফাংশন সরবরাহ করবে। এখানে এই সাধারণ সমাধানের একটি নন- var fn = function(){ fn = function(){}; do stuff; };
$পরিবর্তে ব্যবহারের জন্য @ 1j01 সম্পাদিত
আমি আপনার যুক্তি জানি না বলে এটি একটি পরামর্শ। আপনার জন্য মে বা না কাজ করতে পারে।
Jquery লাইভ () এবং এক () ফাংশনগুলির সমন্বয় করার চেষ্টা করুন আপনাকে ইভেন্টের পুনঃতফসিলের চেয়ে আরও ভাল ফলাফল দেবে।
আপনার 2 ডিওএম উপাদান (পিতামাতা ও শিশু) থাকলে বিশেষ ক্ষেত্রে কাজ করে। প্যারেন্ট নোডে লাইভ () নিশ্চিত করে তোলে ইভেন্টটি হ'ল এবং তারপরে একটি () কল করে ইভেন্টটিকে গতিশীলভাবে রেজিস্টার করতে যা কেবল একবারেই কার্যকর করা হবে। (এটি পুনঃসামাগুলির মতো অনুরূপ কার্যকারিতা সরবরাহ করে)।
One()ফাংশন কাজ করে chromeকিন্তু কাজ করে safariনা Mac।
আপনি আবদ্ধ উপাদানগুলিতে CSS ক্লাস যুক্ত করতে পারেন এবং তারপরে সেগুলি ফিল্টার আউট করতে পারেন:
function someMethod()
{
$(obj).not('.click-binded')
.click(function {})
.addClass('click-binded');
}
এই পদ্ধতিটি প্লাগইনগুলির জন্যও ব্যবহৃত হতে পারে:
$(obj).not('.datetimepicker-applied')
.datetimepicker()
.addClass('datetimepicker-applied');
var bound = false;
function someMethod()
{
if(!bound)
{
$(obj).click(function {});
bound = true;
}
}
তবে আমি সম্ভবত এটি খতিয়ে দেখব যে কোনও ধরণের কাজ করার আগে এটি কেন দু'বার বলা হচ্ছে।
boundকরার someMethod()পরিবর্তে সংযুক্ত রয়েছে ।
আপনি এই jQuery এক্সটেনশন ফাংশনটি ব্যবহার করতে পারেন।
$.fn.once = function (type, fn, uid) {
if(uid == undefined) {
console.error("Called $.once without uid\n", this, "\n", fn);
}
var dataStr = type+"-handler-"+uid;
if(!this.data(dataStr)) {
this.data(dataStr, true);
this.on(type, fn);
}
};
পরিবর্তে এটি করার
$("button").on("click", function(){
alert("You Clicked On A Button");
});
ইয়া এই কর
$("button").once("click", function(){
alert("You Clicked On A Button");
}, "btnHandler");
এখন যখন আমার চারপাশে একটি ফাংশন হবে
function addBtnHandler() {
$("button").once("click", function() {
alert("You Clicked On A Button");
}, "btnHandler");
}
এবং আমি একাধিক বার কল
addBtnHandler();
addBtnHandler();
addBtnHandler();
এটি কেবল একবার করে।
লক্ষ্য করুন যে এক্সটেনশনটি ইউআইডি এবং প্রকার উভয় পরীক্ষা করে কাজ করে। এর অর্থ হ'ল আপনি একই ইউইডের সাথে বিভিন্ন ধরণের হ্যান্ডলারে বাঁধতে পারেন, আপনি এটি চাইবেন বা নাও করতে পারেন। এটি পরিবর্তন করতে।
var dataStr = type+"-handler-"+uid;
যেমন কিছু সঙ্গে
var dataStr = "handler-"+uid;
আমি কেবল একবারই ডোম উপাদানটির সাথে আবদ্ধ ইভেন্টের জন্য jquery পদ্ধতিটি বন্ধ করে দেওয়ার চেষ্টা করছিলাম যা এখনও বিদ্যমান নেই বা ডোম উপাদানটি এখনও তৈরি হয়নি।
$('.select').off('event').on('event', 'selector', function(e){ // });
এই কোডটি সঠিকভাবে কাজ করছে না
আমি একটি খুব লাভজনক পদ্ধতি জুড়ে এসেছি এটি 'এক' পদ্ধতি। এটি খুব কার্যকর যখন আপনি কেবলমাত্র একবার ইভেন্ট বাঁধতে চান।
আপনি এখানে নথিটি খুঁজে পেতে পারেন http://api.jquery.com/one/
এটি 'অন' পদ্ধতি হিসাবে একই তবে একাধিক নির্বাচকদের ইভেন্টের সাথে লেগে না থাকার সাথে এর আচরণের সাথে পৃথক।
$('body').one('click', 'selector', function(){ // do your stuff here });
আপনি অ্যাডএভেন্টলিস্টনার পদ্ধতি এবং তার একবারের বিকল্পটি ব্যবহার করে খাঁটি জেএস দিয়ে এটি অর্জন করতে পারেন
target.addEventListener('click', handler, {once: true});