.On ('ক্লিক') বনাম .ক্লিক () এর মধ্যে পার্থক্য


525

নিম্নলিখিত কোডের মধ্যে কোনও পার্থক্য আছে কি?

$('#whatever').on('click', function() {
     /* your code here */
});

এবং

$('#whatever').click(function() {
     /* your code here */
});

উত্তর:


761

আমি মনে করি, পার্থক্যটি ব্যবহারের ধরণে রয়েছে।

আমি পছন্দ করেন .onবেশি .clickকারণ সাবেক পারেন পরিবর্তনশীল যোগ উপাদানের জন্য কম মেমরি এবং কাজ ব্যবহার করুন।

নিম্নলিখিত এইচটিএমএল বিবেচনা করুন:

<html>
    <button id="add">Add new</button>
    <div id="container">
        <button class="alert">alert!</button>
    </div>
</html>

যেখানে আমরা নতুন বোতাম যুক্ত করি

$("button#add").click(function() {
    var html = "<button class='alert'>Alert!</button>";
    $("button.alert:last").parent().append(html);
});

এবং "সতর্কতা!" একটি সতর্কতা প্রদর্শন করতে। আমরা এর জন্য "ক্লিক" বা "চালু" ব্যবহার করতে পারি।


আমরা যখন ব্যবহার করি click

$("button.alert").click(function() {
    alert(1);
});

উপরের সাথে, নির্বাচকের সাথে মেলে এমন প্রতিটি উপাদানগুলির জন্য একটি পৃথক হ্যান্ডলার তৈরি হয় । এর মানে

  1. অনেক মিলকারী উপাদানগুলি অনেকগুলি অভিন্ন হ্যান্ডলার তৈরি করতে পারে এবং এইভাবে মেমরির পদচিহ্নগুলি বাড়িয়ে তোলে
  2. গতিশীলভাবে যুক্ত আইটেমগুলির হ্যান্ডলারটি থাকবে না - যেমন, উপরের এইচটিএমএল এ নতুন যুক্ত হওয়া "সতর্কতা!" আপনি হ্যান্ডলারটি পুনরায় ফিরিয়ে না দিলে বোতামগুলি কাজ করবে না।

আমরা যখন ব্যবহার করি .on

$("div#container").on('click', 'button.alert', function() {
    alert(1);
});

উপরের সাথে, গতিশীলভাবে তৈরি হওয়াগুলি সহ আপনার নির্বাচকের সাথে মেলে এমন সমস্ত উপাদানগুলির একটি একক হ্যান্ডলার ।


... ব্যবহারের আর একটি কারণ .on

অ্যাড্রিন যেমন নীচে মন্তব্য করেছেন, ব্যবহারের আরেকটি কারণ .onহ'ল নাম স্পিড ইভেন্ট।

আপনি যদি কোনও হ্যান্ডলার যুক্ত করেন তবে .on("click", handler)সাধারনত এটি সরিয়ে .off("click", handler)ফেলুন যা খুব হ্যান্ডলারটিকে সরিয়ে ফেলবে। স্পষ্টতই এটি কাজ করে যদি আপনার ফাংশনটির কোনও রেফারেন্স থাকে তবে আপনি যদি না করেন তবে কী করবেন? আপনি নাম স্থান ব্যবহার করুন:

$("#element").on("click.someNamespace", function() { console.log("anonymous!"); });

আনবাইন্ডিংয়ের মাধ্যমে

$("#element").off("click.someNamespace");

2
কি সম্পর্কে: $ ('বাটন.এলার্ট')। ('ক্লিক', ফাংশন () {সতর্কতা (1);}); ?
ম্যাথিউ

8
@andreister আমাকে সংশোধন করে আমি ভুল কিন্তু আমি বিশ্বাস করি যে অন্য সুবিধা নামব্যবধান ব্যবহার যখন ব্যবহার করছে on('click' ...)দেখুন stackoverflow.com/a/3973060/759452 অর্থাত। on('click.darkenallothersections' ...)এবং একই সাথে থাকতে পারে on('click.displaynextstep' ...), তবে আমি বেছে বেছে কেবল তার ব্যবহারটি বন্ধ করতে পারি.unbind('click.displaynextstep')
Adrien Be

আমি মনে করি না যে প্রতিটি উপাদান নির্বাচকের সাথে মেলে তার জন্য একটি পৃথক হ্যান্ডলার তৈরি করা হয়েছে। আমি মনে করি যে 1 টি হ্যান্ডলার তৈরি করা হবে তবে ওভারহেড এই হ্যান্ডলারটি একাধিক উপাদানকে আবদ্ধ করা এবং এই সমস্ত উপাদানগুলি পর্যবেক্ষণ করে আসে। কমপক্ষে, আমি ডকুমেন্টেশনে এটি পাইনি।
ট্রেস করুন

7
কেউ কেন ব্যাখ্যা করতে পারেন কেন .on গতিশীল যুক্ত হওয়া আইটেমের জন্য কাজ করতে পারে তবে .ক্লিক পারে না?
মেংটি

2
on()jQuery মধ্যে প্রবণতা হয়। আমি jQuery 3 এ আপগ্রেড $(window).load(function() {});করার $(window).on("load", function (e) {})সময় আমাকে আপডেট করতে হয়েছিল
ভিক্টর স্টডার্ডার্ড

37

নিম্নলিখিত কোডের মধ্যে কোনও পার্থক্য আছে কি?

না, আপনার প্রশ্নের দুটি কোড নমুনার মধ্যে কোনও কার্যকরী পার্থক্য নেই। .click(fn)এটি একটি "শর্টকাট পদ্ধতি" .on("click", fn)। এর জন্য ডকুমেন্টেশন থেকে.on() :

কিছু ইভেন্টের শর্টহ্যান্ড পদ্ধতি রয়েছে যেমন .click()ইভেন্ট হ্যান্ডলারদের সংযুক্ত বা ট্রিগার করতে ব্যবহার করা যেতে পারে। শর্টহ্যান্ড পদ্ধতির সম্পূর্ণ তালিকার জন্য ইভেন্টের বিভাগটি দেখুন

দ্রষ্টব্য যে এটির .on()থেকে পৃথক .click()যে এটিতে প্যারামিটারটি পাস করে প্রতিনিধি ইভেন্ট হ্যান্ডলারগুলি তৈরি করার ক্ষমতা রয়েছে selector, যেখানে .click()তা নেই। যখন প্যারামিটার .on()ছাড়াই ডাকা হয় selector, এটি ঠিক একইরকম আচরণ করে .click()। আপনি যদি ইভেন্ট প্রতিনিধি চান, ব্যবহার করুন .on()


4
পারফরম্যান্স ইস্যু সম্পর্কে আমার @আন্দ্রিস্টারকে কী বলেছে?
rubo77

@ রুবো 77 সেরা উপেক্ষিত। আমরা একক-চিত্র মিলিসেকেন্ড নিচ্ছি।
ররি ম্যাকক্রসন

1
@ ররিএমসিক্রসন যদিও এটি আমার পক্ষে একটি বড় বিষয় - আমি এটি খুঁজছি কারণ একটি পৃষ্ঠায় আমার প্রায় 3000 টি প্রশ্ন রয়েছে যার ইভেন্টগুলির প্রয়োজন। প্রতি এক মিলিসেক আমার পৃষ্ঠাটি সম্পাদন করতে 3 সেকেন্ড বেশি সময় নেয়। আপনার মন্তব্য বড় তালিকাগুলির জন্য সহায়ক নয়।
র্যান্ডি

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

5
@ রুবো - - কোনও পরামিতি পাস করে ইভেন্ট প্রতিনিধি ব্যবহার করার সময়ই পারফরম্যান্স লাভটি দেখা যায় selector। আপনি যদি .on()কোনও selectorপরামিতি ছাড়াই কল করেন তবে ব্যবহারের চেয়ে কোনও কার্যকারিতা উন্নতি হবে না .click()
গিলি 3

23

.on()jQuery 1.7 হিসাবে আপনার সমস্ত ইভেন্টের বাইন্ডিং করার প্রস্তাবিত উপায়। এটি উভয়ের সমস্ত কার্যকারিতা রোল করে .bind()এবং .live()একটি ফাংশনে রূপান্তর করে যা আপনি বিভিন্ন পরামিতিগুলি পাস করার সাথে সাথে আচরণকে পরিবর্তিত করে।

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

// Bind to all links inside #whatever, even new ones created later.
$('#whatever').on('click', 'a', function() { ... });

"# যা কিছু ভিতরে থাকা সমস্ত লিঙ্কগুলিতে আবদ্ধ হোন, এমনকি পরে নতুন তৈরি করা হয়েছে।" ঠিক কি .live()তাই না? এছাড়াও, এটি অন্যান্য উত্তরের সাথে বিরোধী বলে মনে হচ্ছে যা বলে যে এটির কেবল কার্যকারিতা রয়েছে .click()এবং তাই ভবিষ্যতের ইভেন্টগুলিতে প্রযোজ্য নয়।
বিগকোড

3
@ বাবোনক - এটি অন্যান্য উত্তরের সাথে বিরোধিতা করে না, কারণ প্রথম অনুচ্ছেদে ইন্টার্রোবাং যেমন বলেছিল সে .on()কি করতে .click()পারে এবং কী করতে পারে .bind()এবং .live()করতে পারে - এটি আপনাকে কোন পরামিতিগুলির সাথে কল করে তা নির্ভর করে। (কিছু অন্যান্য উত্তরও এর উল্লেখ করেছে)) তবে মনে রাখবেন যে "# যা কিছু ভিতরে সমস্ত লিঙ্কে বাঁধা" কী তা নয়.live() , এটি কী .delegate()করে। আপনাকে ধারক নির্দিষ্ট করার পরিবর্তে .live()সমস্ত ভিতরে আবদ্ধ হয় document। নোট এছাড়াও .live()jQuery 1.7 থেকে অবচয় করা হয়।
nnnnnn

প্রতিনিধি ইভেন্টগুলির জন্য +1: "প্রতিনিধি ইভেন্ট হ্যান্ডলার সংযুক্ত থাকাকালীন উপস্থিত থাকার গ্যারান্টিযুক্ত এমন একটি উপাদান বাছাই করে, আপনি ইভেন্ট হ্যান্ডলারদের প্রায়শই সংযুক্ত ও সরানোর প্রয়োজন এড়াতে প্রতিনিধি ইভেন্টগুলি ব্যবহার করতে পারেন" " api.jquery.com/on
jimasp

19

অন্যান্য উত্তর দ্বারা উল্লিখিত:

$("#whatever").click(function(){ });
// is just a shortcut for
$("#whatever").on("click", function(){ })

যদিও এটি .on()বেশ কয়েকটি অন্যান্য প্যারামিটার সংমিশ্রণগুলিকে সমর্থন .click()করে যা এটির নয়, এটি ইভেন্টের প্রতিনিধি (সুপারসিডিং .delegate()এবং .live()) পরিচালনা করতে দেয় ।

(এবং স্পষ্টতই "কীআপ", "ফোকাস" ইত্যাদির জন্য অনুরূপ অন্যান্য শর্টকাট পদ্ধতি রয়েছে)

আমি অতিরিক্ত উত্তর পোস্ট করার কারণটি হল আপনি যদি .click()কোনও পরামিতি না দিয়ে কল করেন তবে কী ঘটে তা উল্লেখ করা:

$("#whatever").click();
// is a shortcut for
$("#whatever").trigger("click");

লক্ষণীয় যে আপনি যদি .trigger()সরাসরি ব্যবহার করেন তবে আপনি অতিরিক্ত পরামিতি বা একটি jQuery ইভেন্ট অবজেক্টও পাস করতে পারেন, যা আপনি করতে পারবেন না .click()

আমি আরও উল্লেখ করতে চেয়েছিলাম যে আপনি jQuery উত্স কোডটি (jquery-1.7.1.js তে) দেখলে আপনি দেখতে পাবেন যে অভ্যন্তরীণভাবে .click()(বা .keyup(), ইত্যাদি) ফাংশনটি আসলে কল করবে .on()বা .trigger()। স্পষ্টতই এর অর্থ হ'ল আপনি নিশ্চিত হয়ে উঠতে পারেন যে তাদের সত্যই একই ফল রয়েছে, তবে এর অর্থ হ'ল ব্যবহারের .click()ফলে সামান্য কিছুটা ওভারহেড রয়েছে - বেশিরভাগ পরিস্থিতিতে উদ্বেগ বা এমনকি চিন্তা করার মতো কিছু নয় তবে তাত্ত্বিকভাবে এটি অসাধারণ পরিস্থিতিতে গুরুত্বপূর্ণ হতে পারে।

সম্পাদনা: পরিশেষে, নোট করুন যা .on()আপনাকে একই লাইনে একাধিক ইভেন্টকে একই ফাংশনে আবদ্ধ করতে দেয়, যেমন:

$("#whatever").on("click keypress focus", function(){});

পদ্ধতিগুলি কি উভয়ই স্মৃতিতে লোড করা হয় না? তাহলে কিছু যায় আসে না? এবং পাঠযোগ্যতার জন্য এটি সম্ভবত হ্যান্ডিয়ার?
ভিন্স ভি।

@VinceV। - হ্যাঁ. "স্ট্যান্ডার্ড" অ-প্রতিনিধি ইভেন্ট হ্যান্ডলারদের জন্য, উভয় পদ্ধতিই একই কাজ করে এবং পারফরম্যান্সের পার্থক্যটি উপেক্ষণীয়, সুতরাং আপনি কোন পদ্ধতিটি ব্যবহার করেন তা ব্যক্তিগতভাবে পছন্দসই বিষয়। (আমি সাধারণত পছন্দ করতাম .click()))
nnnnnn

9

না, নেই।
এর বিন্দুটি on()হ'ল এটির অন্যান্য ওভারলোডগুলি, এবং শর্টকাট পদ্ধতি নেই এমন ইভেন্টগুলি পরিচালনা করার ক্ষমতা ability


1
@ আরিগোল্ড: এগুলি হ'ল অন্যান্য ওভারলোড।
এসএলএক্স

9

তারা একই হিসাবে উপস্থিত হয় ... ক্লিক () ফাংশন থেকে ডকুমেন্টেশন :

এই পদ্ধতিটি .bind ('ক্লিক করুন', হ্যান্ডলার) এর শর্টকাট is

() ফাংশন থেকে ডকুমেন্টেশন :

JQuery 1.7 হিসাবে, .on () পদ্ধতি ইভেন্ট হ্যান্ডলার সংযুক্ত করার জন্য প্রয়োজনীয় সমস্ত কার্যকারিতা সরবরাহ করে। পুরানো jQuery ইভেন্ট পদ্ধতি থেকে রূপান্তর করতে সহায়তার জন্য .bind (), .delegate () এবং .live () দেখুন। .On () এর সাথে আবদ্ধ ইভেন্টগুলি সরাতে, ওফ () দেখুন।


আপনার উভয় মতামত একত্রিত করা উচিত। ক্লিক () হ'ল .Bind () এবং .On () ... এর জন্য শর্টকাট! জ্যাকুয়ারি 1.7.0 + অনুসারে এটি ট্রিগার ('ক্লিক') এর জন্যও একটি শর্টকাট। [ api.jquery.com/click/]
ধানেসেক

এই দস্তাবেজ থেকে একটি প্রশংসনীয় সহজবোধ্য ব্যাখ্যা, কিন্তু উত্তর নিচে কেন এক অন্য চেয়ে ভাল হয় একটি ভাল উদাহরণ আছে .clickবনাম.on
phatskat

@ ফটসকাত - আমি আপনার সাথে একমত হলাম :)
ডানা

8

.click ইভেন্টগুলি কেবলমাত্র যখন উপাদানটি রেন্ডার হয়ে যায় এবং কেবলমাত্র ডিওএম প্রস্তুত হলে লোড হওয়া উপাদানের সাথে সংযুক্ত থাকে events

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


5

এখানে আপনি ক্লিক ইভেন্ট প্রয়োগের বিভিন্ন উপায়ের তালিকা পাবেন। আপনি সেই অনুযায়ী উপযুক্ত হিসাবে বেছে নিতে পারেন বা যদি আপনার ক্লিকটি কাজ না করে থাকে তবে এগুলির মধ্যে একটি বিকল্প চেষ্টা করুন try

$('.clickHere').click(function(){ 
     // this is flat click. this event will be attatched 
     //to element if element is available in 
     //dom at the time when JS loaded. 

  // do your stuff
});

$('.clickHere').on('click', function(){ 
    // same as first one

    // do your stuff
})

$(document).on('click', '.clickHere', function(){
          // this is diffrent type 
          //  of click. The click will be registered on document when JS 
          //  loaded and will delegate to the '.clickHere ' element. This is 
          //  called event delegation 
   // do your stuff
});

$('body').on('click', '.clickHere', function(){
   // This is same as 3rd 
   // point. Here we used body instead of document/

   // do your stuff
});

$('.clickHere').off().on('click', function(){ // 
    // deregister event listener if any and register the event again. This 
    // prevents the duplicate event resistration on same element. 
    // do your stuff
})

3

তারা এখন ক্লিক () ক্লিককে অবমূল্যায়ন করেছে, তাই ('ক্লিক') এর সাথে চলতে ভাল


সুতরাং আপনি এখন যদি পুরানো ক্লিক () আচরণ চান তবে আপনি কী করবেন?
বিগকোড

1

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


0

নতুন উপাদানসমূহ

সমালোচিত পয়েন্টগুলি হাইলাইট করার জন্য উপরের বিস্তৃত উত্তরের সংযোজন হিসাবে আপনি যদি নতুন উপাদানগুলির সাথে ক্লিক করতে চান তবে:

  1. প্রথম নির্বাচক দ্বারা নির্বাচিত উপাদানগুলি যেমন $ ("বডি") অবশ্যই ঘোষণার সময় উপস্থিত থাকতে হবে অন্যথায় সংযুক্ত করার মতো কিছুই নেই।
  2. আপনার লক্ষ্য উপাদানগুলির জন্য দ্বিতীয় যুক্তি হিসাবে বৈধ নির্বাচনকারী সহ .on () ফাংশনে আপনাকে অবশ্যই তিনটি আর্গুমেন্ট ব্যবহার করতে হবে।

-1
$('.UPDATE').click(function(){ }); **V/S**    
$(document).on('click','.UPDATE',function(){ });

$(document).on('click','.UPDATE',function(){ });
  1. এটি তখন আরও কার্যকর $ ('। আপডেট') 'ক্লিক করুন (ফাংশন () {});
  2. এটি কম স্মৃতি ব্যবহার করতে পারে এবং গতিযুক্ত যুক্ত উপাদানগুলির জন্য কাজ করতে পারে।
  3. সম্পাদনা এবং মুছে ফেলা বোতামের সাথে কিছু সময় গতিশীল ফিচার ডেটা সম্পাদনা করার সময় জিকুয়ের ইভেন্ট তৈরি করে না বা ফর্মের সারি ডেটার ডেটা মুছে ফেলা হয়, সেই সময়টি $(document).on('click','.UPDATE',function(){ });jquery ব্যবহার করে কার্যকরভাবে একই ফ্যাচ করা ডেটার মতো কাজ করে। আপডেট বা মুছে ফেলার সময় বোতামটি কাজ করছে না:

এখানে চিত্র বর্ণনা লিখুন


document (দস্তাবেজ) .অন ('ক্লিক করুন', '। আপডেট', ফাংশন () {}); 1) এটি effective ('। আপডেট') পরে আরও কার্যকর click ক্লিক করুন (ফাংশন () {}); 2) এটি কম মেমরি ব্যবহার করতে পারে এবং গতিযুক্ত যুক্ত উপাদানগুলির জন্য কাজ করতে পারে। 3) সম্পাদনা এবং মুছে ফেলা বোতাম সহ কিছু সময় গতিশীল ফিচার ডেটা JQuery ইভেন্ট তৈরি করে না ফর্মের সারি ডেটার ডেটা মুছে ফেলা হয়, সেই সময় $ (নথি) .অন ('ক্লিক', 'আপডেট।', ফাংশন () {}); কার্যকরভাবে কাজ করছে [ আপডেট বা মুছে ফেলার সময় বোতামটি কাজ করছে না
দেবাং হায়ার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.