jQuery ক্লোন () ইভেন্ট বাইন্ডিংগুলি ক্লোনিং করে না, এমনকি () সহ


100

মোবাইল ওয়েব অ্যাপ্লিকেশনগুলিতে ব্যবহারের জন্য আমি কাস্টম jQuery ইভেন্টগুলির একটি সিরিজ তৈরি করেছি। তারা দুর্দান্ত কাজ করে এবং তাদের পরীক্ষা করা হয়েছে। যাইহোক, আমি একটি ছোট সমস্যা হয়েছি যা বুঝতে আমার সমস্যা হচ্ছে।

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

এর আগে কি কেউ এর মুখোমুখি হয়েছে, কেউ কি আশেপাশের কোনও সম্ভাব্য কাজের কথা জানেন? আমি ভেবেছিলাম যে ব্যবহার .on()করা এখন যে উপাদানগুলিতে বিদ্যমান রয়েছে তার ভবিষ্যত বা ভবিষ্যতে বাঁধাই রক্ষা করার কথা ছিল?


"আমি ভেবেছিলাম। - এর সাথে খুব একটা সম্পর্ক নেই .clone; এটি jQuery এর ইভেন্ট প্রতিনিধি যুক্তি এবং আপনি একটি অতিরিক্ত নির্বাচক পাস যদি এটি কাজ করে .on
pimvdb

উত্তর:


214

আমি মনে করি আপনার .clone () পদ্ধতির এই ওভারলোডটি ব্যবহার করা উচিত :

$element.clone(true, true);

ক্লোন ([ডেটাঅ্যান্ডএভেন্টস সহ] [, ডিপ উইথডাটাআ্যান্ডএভেন্টস]))

ডেটাঅ্যান্ডএভেন্টস সহ : একটি বুলিয়ান নির্দেশ করে যা ইভেন্ট হ্যান্ডলার এবং ডেটা উপাদানগুলির সাথে অনুলিপি করা উচিত। ডিফল্ট মান মিথ্যা।

ডিপ উইথডেটাএন্ডএভেন্টস : ক্লোনযুক্ত উপাদানটির সমস্ত শিশুদের ইভেন্ট হ্যান্ডলার এবং ডেটা অনুলিপি করা উচিত কিনা তা নির্দেশ করে এমন একটি বুলিয়ান। ডিফল্টরূপে এর মান প্রথম যুক্তির মানের সাথে মেলে (যা মিথ্যাতে ডিফল্ট হয়)।


সতর্কতা অবলম্বন করুন যে .on()ঘটনাগুলি লক্ষ্যগুলিতে নয় তবে যে উপাদানটিকে আপনি অর্পণ করছেন তা আবদ্ধ করে। সুতরাং আপনার যদি:

$('#container').on('click', '.button', ...);

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

যদি আপনি # কনটেইনার উপাদানটি ক্লোন করে থাকেন তবে .on()সংরক্ষণের জন্য আপনাকে তৈরি করা বাইন্ডিংগুলির জন্য ইভেন্ট এবং ডেটা সহ গভীর ক্লোন করতে হবে।

আপনি যদি .on()কোনও পিতামাতার সাথে ব্যবহার করেন তবে এটি প্রয়োজনীয় হবে না #container


21
.clone()গ্রহণযোগ্য যুক্তি কখনও জানতাম না । এফএমএল। আপনার সাহায্যের জন্য ধন্যবাদ.
বেনম

4
@ ডিডিয়ারগাইস ধন্যবাদ, আমি .clone()ক্লোনিং না করার সাথে লড়াই করে যাচ্ছি (ডিওমে .data()উভয় data-xxxx="somedata"এবং ডেটা) .. এটি এটিকেও ঠিক করে দেয়!
রিচার্ড ডি উইট

আমি এই প্রশ্নটি জিজ্ঞাসা করেছি , কিন্তু কেউ আমাকে উত্তর দেয় নি। আপনি কি আমাকে সাহায্য করতে পারেন?
আলী সোলতানি

দুর্দান্ত, clickনতুন ক্লোনড ডিভ যুক্ত করার জন্য আমাকে একটি ইভেন্ট করতে হয়েছিল। readyকাজ করছিল না
csandreas1

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