সংক্ষিপ্ত বিবরণ
আমার নিম্নলিখিত HTML গঠন আছে এবং আমি উপাদানগুলি dragenter
এবং dragleave
ইভেন্টগুলি সংযুক্ত করেছি attached<div id="dropzone">
<div id="dropzone">
<div id="dropzone-content">
<div id="drag-n-drop">
<div class="text">this is some text</div>
<div class="text">this is a container with text and images</div>
</div>
</div>
</div>
সমস্যা
আমি যখন কোনও ফাইল টেনে আনি <div id="dropzone">
, তখন dragenter
ঘটনাটি প্রত্যাশার সাথে সরিয়ে ফেলা হয়। যাইহোক, যখন আমি কোনও শিশু মৌলের উপর দিয়ে আমার মাউসটি সরান, যেমন <div id="drag-n-drop">
, dragenter
ইভেন্টটি <div id="drag-n-drop">
উপাদানটির জন্য চালিত হয় এবং তারপরে dragleave
ইভেন্টটির জন্য গুলি চালানো হয়<div id="dropzone">
উপাদানটির নিক্ষেপ করা হয়।
যদি আমি <div id="dropzone">
আবার উপাদানটির উপরে ঘোরাফেরা করি তবে dragenter
ইভেন্টটি আবারো গুলি চালানো হবে, যা দুর্দান্ত, তবে তারপরে dragleave
ইভেন্টটি শিশু উপাদানটির জন্য ঠিক রেখে দেওয়া হয়েছে, তাইremoveClass
নির্দেশ মৃত্যুদন্ড কার্যকর করা হয়, যা ঠান্ডা করা হয় না।
এই আচরণটি 2 কারণে সমস্যাযুক্ত:
আমি শুধু সংযুক্ত করছি
dragenter
&dragleave
করতে<div id="dropzone">
তাই আমি বুঝতে পারছি না কেন শিশুদের উপাদান এই ঘটনা পাশাপাশি সংযুক্ত আছে।আমি
<div id="dropzone">
বাচ্চাদের উপর ঘুরে বেড়াতে গিয়ে উপাদানটির উপরে এখনও টানছি যাতে আমি গুলি চালাতে চাই নাdragleave
!
jsFiddle
এখানে টিঙ্কার করার জন্য একটি জেএসফিডেল রয়েছে: http://jsfiddle.net/yYF3S/2/
প্রশ্ন
সুতরাং ... আমি কীভাবে এটি তৈরি করতে পারি যে আমি যখন কোনও <div id="dropzone">
উপাদানটি যখন কোনও ফাইলকে টেনে আনি, তখন আমি dragleave
কোনও বাচ্চার উপাদানকে টেনে নিয়ে যাই তা চালানো হয় না ... যখন আমি <div id="dropzone">
উপাদানটি রেখে যাই তখনই এটি চালিত হওয়া উচিত .. । উপাদানটির সীমানার মধ্যে যে কোনও জায়গায় ঘোরাফেরা / টেনে আনলে ঘটনাটি ট্রিগার করা উচিত নয়dragleave
।
কমপক্ষে HTML5 ড্রাগ-এন-ড্রপ সমর্থনকারী ব্রাউজারগুলিতে আমার এটি ক্রস ব্রাউজারের সাথে সামঞ্জস্যপূর্ণ হওয়া দরকার so সুতরাং এই উত্তরটি পর্যাপ্ত নয়।
দেখে মনে হচ্ছে গুগল এবং ড্রপবক্স এটিকে খুঁজে পেয়েছে তবে তাদের উত্স কোডটি ছোট / জটিল করা হয়েছে তাই আমি তাদের প্রয়োগ থেকে এটিকে বের করতে সক্ষম হইনি।
e.stopPropagation();