আমি সম্প্রতি jQuery 1.8 থেকে 2.1 এ আপডেট করেছি। আমি হঠাৎ আবিষ্কার করেছিলাম যে .live()
কাজ করা থামছে।
আমি ত্রুটি পেয়েছি TypeError: $(...).live is not a function
।
আমি কি এর জায়গায় কোন পদ্ধতি ব্যবহার করতে পারি .live()
?
আমি সম্প্রতি jQuery 1.8 থেকে 2.1 এ আপডেট করেছি। আমি হঠাৎ আবিষ্কার করেছিলাম যে .live()
কাজ করা থামছে।
আমি ত্রুটি পেয়েছি TypeError: $(...).live is not a function
।
আমি কি এর জায়গায় কোন পদ্ধতি ব্যবহার করতে পারি .live()
?
উত্তর:
.live()
1.9 সংস্করণে অপসারণ করা হয়েছে।এর অর্থ আপনি যদি সংস্করণ 1.8 এবং তার আগের সংস্করণ থেকে আপগ্রেড করছেন তবে নীচের স্থানান্তর গাইডটি অনুসরণ না করলে আপনি জিনিসগুলি ভাঙ্গার লক্ষ্য করবেন। আপনি কেবল .live()
সঙ্গে প্রতিস্থাপন করা উচিত নয় .on()
!
জন্য দ্রুত / গরম সংশোধন করা হয়েছে একটি লাইভ সাইটে, না শুধু শব্দ প্রতিস্থাপন live
সঙ্গে on
,
যেমন পরামিতি আলাদা !
.live(events, function)
মানচিত্র করা উচিত:
.on(eventType, selector, function)
(শিশু) নির্বাচকটি খুব গুরুত্বপূর্ণ! আপনার যদি কোনও কারণে এটি ব্যবহার করার প্রয়োজন না হয় তবে সেট করে দিন null
।
আগে:
$('#mainmenu a').live('click', function)
এর পরে, আপনি বাচ্চা উপাদানটি ( a
) .on()
নির্বাচন করতে যান:
$('#mainmenu').on('click', 'a', function)
আগে:
$('.myButton').live('click', function)
এর পরে, আপনি উপাদানটি ( .myButton
)টিকে .on()
নির্বাচকের কাছে নিয়ে যান এবং নিকটতম পিতামূলক উপাদানটি পান (পছন্দমতো কোনও আইডি সহ):
$('#parentElement').on('click', '.myButton', function)
অভিভাবক হিসাবে কী রাখবেন তা যদি আপনি না জানেন তবে body
সর্বদা কাজ করে:
$('body').on('click', '.myButton', function)
আপনি নিম্নলিখিত জাভাস্ক্রিপ্ট কোডটি অন্তর্ভুক্ত করে আপনার কোডটিকে পুনরায় সাজানো এড়াতে পারবেন
jQuery.fn.extend({
live: function (event, callback) {
if (this.selector) {
jQuery(document).on(event, this.selector, callback);
}
return this;
}
});
JQuery API ডকুমেন্টেশন তালিকাগুলি live()
1.7 সংস্করণ হিসাবে অবচিত হয়েছে এবং সংস্করণ 1.9: লিঙ্ক হিসাবে সরানো হয়েছে ।
সংস্করণ অবচয়: 1.7, সরানো: 1.9
অধিকন্তু এতে বলা হয়েছে:
JQuery 1.7 হিসাবে, .live () পদ্ধতি অবমূল্যায়ন করা হয়েছে। ইভেন্ট হ্যান্ডলার সংযুক্ত করতে .on () ব্যবহার করুন । JQuery এর পুরানো সংস্করণ ব্যবহারকারীদের .live () এর অগ্রাধিকার হিসাবে .delegate () ব্যবহার করা উচিত
.live()
JQuery> = 1.9 এর ফরওয়ার্ড পোর্ট .live()
অপ্টিমাইজড ডিওএম সিলেক্টর প্রসঙ্গ ব্যবহারের উপর জেএস নির্ভরতাগুলি রিফ্যাক্টর করা এড়ানো
/**
* Forward port jQuery.live()
* Wrapper for newer jQuery.on()
* Uses optimized selector context
* Only add if live() not already existing.
*/
if (typeof jQuery.fn.live == 'undefined' || !(jQuery.isFunction(jQuery.fn.live))) {
jQuery.fn.extend({
live: function (event, callback) {
if (this.selector) {
jQuery(document).on(event, this.selector, callback);
}
}
});
}
.live কে 1.9-এ সরানো হয়েছে, দয়া করে আপগ্রেড গাইডটি দেখুন: http://jquery.com / আপগ্রেড- গাইড / 1.9/# লাইভ- সরানো
একটি খুব সাধারণ ফিক্স যা আপনার কোড পরিবর্তন করার দরকার নেই, কেবল jquery মাইগ্রেশন স্ক্রিপ্ট যুক্ত করুন, এখানে ডাউনলোড করুন https://github.com/jquery/jquery-migrate/
এটি "লাইভ", "ব্রাউজার" ইত্যাদির মতো প্রয়োজনীয় ফাংশনগুলি jquery সরবরাহ করে
আমি প্রয়োজন না হলে .on () সিনট্যাক্স ব্যবহার না করি। উদাহরণস্বরূপ আপনি এর মতো আরও সহজ স্থানান্তর করতে পারেন:
পুরানো:
$('.myButton').live('click', function);
নতুন:
$('.myButton').click(function)
বৈধ ইভেন্ট হ্যান্ডলারের একটি তালিকা এখানে রয়েছে: https://api.jquery.com/category/forms/
আপনি যদি রেলস অফ রেলস এর jQuery রত্ন ব্যবহার করছেন jquery-rails
এবং কোনও কারণে আপনি আপনার উত্তরাধিকার কোডটি রিফ্যাক্ট করতে না পারেন তবে সর্বশেষ সংস্করণটি এখনও সমর্থন করে 2.1.3
এবং আপনি এটিতে আপনার নীচের বাক্য গঠন ব্যবহার করে লক করতে পারেন Gemfile
:
gem 'jquery-rails', '~> 2.1', '= 2.1.3'
তারপরে আপনি আপডেট করতে নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন:
bundle update jquery-rails
আমি আশা করি অন্যদের অনুরূপ সমস্যার মুখোমুখি হতে সহায়তা করবে।
return this;
শৃঙ্খলাবদ্ধতা সংরক্ষণের জন্য ফাংশনের শেষে একটি অন্তর্ভুক্ত করা উচিত