JQuery এ লাইভ () চালু () করা


201

আমার অ্যাপ্লিকেশনটি গতিশীলভাবে ড্রপডাউন যুক্ত করেছে। ব্যবহারকারী যতগুলি প্রয়োজন তাদের যোগ করতে পারেন।

live()এই ড্রপডাউনগুলির একটি যখন সম্পাদনা করা হয়েছিল তা সনাক্ত করার জন্য আমি গতানুগতিকভাবে jQuery এর পদ্ধতিটি ব্যবহার করছিলাম change():

$('select[name^="income_type_"]').live('change', function() {
    alert($(this).val());
});

JQuery 1.7 হিসাবে, আমি এটি আপডেট করেছি:

$('select[name^="income_type_"]').on('change', function() {
    alert($(this).val());
});

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

আমি কি ভুল করছি? ধন্যবাদ!


2
আমি জানি এটি দেরি হয়ে গেছে তবে মনে হয় jQuery liveআসলে onযেভাবেই ব্যবহার করছে , সুতরাং উত্তরাধিকারের কোডটি পুনরায় লেখার প্রয়োজন liveহবে না যতক্ষণ না সরানো হবে, যা আমি বিশ্বাস করি যেটি 1.9। ১..1.১ উত্স থেকে উদ্ধৃত অংশ: live: function( types, data, fn ) {jQuery( this.context ).on( types, this.selector, data, fn ); return this;}সুতরাং যদি কেউ কোনও সংস্করণে আপগ্রেড না করে থাকে তবে liveলিগ্যাসি কোডের জন্য এখনই আপডেটের প্রয়োজন পড়তে পারে না। জন্য নতুন কোর্স ব্যবহার বন্ধ কোড on()পরিবর্তে বাঞ্ছনীয়। আমি কেবল ভেবেছিলাম এই তথ্যটি কোনও পর্যায়ে অন্য কাউকে সহায়তা করতে পারে।
না

1
কীভাবে পরিবর্তন করবেন সে সম্পর্কে মাইগ্রেশন উদাহরণ দেখুন । liveon
স্যামুয়েল লিউ

উত্তর:


246

onডকুমেন্টেশন রাজ্যের (গাঢ়;)):

ইভেন্ট হ্যান্ডলারগুলি কেবলমাত্র নির্বাচিত উপাদানগুলিতে আবদ্ধ; আপনার কোডটিতে কল করার সময় সেগুলি অবশ্যই পৃষ্ঠায় উপস্থিত থাকতে পারে .on()

সমান .live()কিছু হতে হবে

$(document.body).on('change', 'select[name^="income_type_"]', function() {
    alert($(this).val());
});

যদিও আপনি ইভেন্ট হ্যান্ডলারটিকে যতটা সম্ভব উপাদানগুলির সাথে ঘনিষ্ঠভাবে বেঁধে রাখাই ভাল, এটি হায়ারার্কির নিকটে থাকা কোনও উপাদানকে।

আপডেট: অন্য প্রশ্নের উত্তর দেওয়ার সময় আমি জানতে পেরেছিলাম যে .liveডকুমেন্টেশনে এটিও উল্লেখ করা হয়েছে :

Rewriting .live()তার উত্তরাধিকারী পরিপ্রেক্ষিতে পদ্ধতি সহজবোধ্য; এই তিনটি ইভেন্ট সংযুক্তি পদ্ধতির জন্য সমতুল কলগুলির টেম্পলেটগুলি:

$(selector).live(events, data, handler);                // jQuery 1.3+
$(document).delegate(selector, events, data, handler);  // jQuery 1.4.3+
$(document).on(events, selector, data, handler);        // jQuery 1.7+

5
@ জ্যাক: কোনও উদ্বেগ নেই, আইএমও এটি একটি ভাল প্রশ্ন। আমি অনুমান জন এই উপর পদস্খলন পাশাপাশি যখন তারা সব রূপান্তর করতে চেষ্টা করবে bind, liveএবং delegateকল on
ফেলিক্স ক্লিং

4
হ্যাঁ হ্যাঁ, এবং অবশ্যই আমরা কেবল একটি কম্বল চালানোর পরে এই উত্তরটি দেখতে পাচ্ছি .live> থেকে > প্রতিস্থাপন করুন.on
b ই

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

1
@ ফেলিক্সক্লিং যে সঠিক - আমিও এটিকে হোঁচট খেয়েছি! ধন্যবাদ
willdanceforfun

2
অনুসন্ধান ইঞ্জিনের জন্য: jQuery "। লাইভ ()" পদ্ধতিটি v1.7 থেকে অবচয় এবং v1.9 এ সরানো হয়েছে। পরিবর্তে ".on ()" পদ্ধতি ব্যবহার করে আপনার স্ক্রিপ্টগুলি ঠিক করুন। আশ্চর্যজনকভাবে এটি বর্তমান মাইক্রোসফ্ট jquery.unobtrusive-ajax.js v2.0.20710.0 কেও প্রভাবিত করে (মাইক্রোসফ্ট তাদের স্ক্রিপ্টগুলি আপডেট করে না তাই এটি এখন ভেঙে গেছে)।
টনি ওয়াল

25

নির্বাচিত উত্তর ছাড়াও,

jQuery.liveআপনার অ্যাপ্লিকেশনটি স্থানান্তরিত হওয়ার জন্য অপেক্ষা করার সময় jQuery 1.9+ তে পোর্ট করুন। এটি আপনার জাভাস্ক্রিপ্ট ফাইলটিতে যুক্ত করুন।

// Borrowed from jQuery 1.8.3's source code
jQuery.fn.extend({
  live: function( types, data, fn ) {
          if( window.console && console.warn ) {
           console.warn( "jQuery.live is deprecated. Use jQuery.on instead." );
          }

          jQuery( this.context ).on( types, this.selector, data, fn );
          return this;
        }
});

দ্রষ্টব্য: উপরের ফাংশনটি jQuery v3 থেকে this.selectorমুছে ফেলা হিসাবে কাজ করবে না ।

অথবা, আপনি https://github.com/jquery/jquery-migrate ব্যবহার করতে পারেন


7

সবেমাত্র একটি আরও ভাল সমাধান পাওয়া গেছে যা তৃতীয় পক্ষের কোড সম্পাদনা করে না:

https://github.com/jquery/jquery-migrate/#readme

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

যেহেতু jQuery মাইগ্রেট jQuery ফাউন্ডেশন দ্বারা রক্ষণাবেক্ষণ করা হয় আমি মনে করি এটি কেবল তৃতীয় পক্ষের গ্রন্থাগারগুলির জন্যই নয় এবং আপনার নিজের লাইব্রেরিগুলিতে কীভাবে আপডেট করা যায় সে সম্পর্কে সতর্কতা বার্তা পাওয়া যায়।


3

নির্বাচিত উত্তরগুলি ছাড়াও,

আপনি যদি ভিজ্যুয়াল স্টুডিও ব্যবহার করেন তবে আপনি রেজেক্স রিপ্লেসম ব্যবহার করতে পারেন ।
সম্পাদনাতে> সন্ধান করুন এবং প্রতিস্থাপন করুন> ফাইলগুলিতে প্রতিস্থাপন করুন
বা Ctrl + Shift + H

পপ-আপ খুঁজুন এবং প্রতিস্থাপনে, এই ক্ষেত্রগুলি সেট করুন

কী সন্ধান করুন: এর সাথে \$\((.*)\)\.live\((.*),
প্রতিস্থাপন করুন: $(document.body).on($2,$1,
বিকল্পগুলি সন্ধান করুন "নিয়মিত এক্সপ্রেশন ব্যবহার করুন" চেক করুন


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