AddEventListener এ ব্যবহারের ক্যাপচার প্যারামিটারটি বুঝতে অক্ষম


290

আমি https://developer.mozilla.org/en/DOM/element.addEventListener এ নিবন্ধটি পড়েছি তবে useCaptureগুণাবলী বুঝতে অক্ষম । সংজ্ঞা আছে:

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

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

function load() {
  document.addEventListener("click", function() {
    alert("parent event");
  }, true);

  document.getElementById("div1").addEventListener("click", function() {
    alert("child event");
  }, false);
}
<body onload="load()">
  <div id="div1">click me</div>
</body>

উত্তর:


350

ইভেন্ট দুটি অনুষ্ঠানে সক্রিয় করা যেতে পারে: শুরুতে ("ক্যাপচার"), এবং শেষে ("বুদ্বুদ")। ইভেন্টগুলি কীভাবে সংজ্ঞায়িত করা হয় তার ক্রমে সম্পাদন করা হয়। বলুন, আপনি 4 ইভেন্ট শ্রোতার সংজ্ঞা দিয়েছেন:

window.addEventListener("click", function(){console.log(1)}, false);
window.addEventListener("click", function(){console.log(2)}, true);
window.addEventListener("click", function(){console.log(3)}, false);
window.addEventListener("click", function(){console.log(4)}, true);

এই আদেশে লগ বার্তা উপস্থিত হবে:

  • 2(ব্যবহার করে প্রথমে সংজ্ঞায়িত capture=true)
  • 4(দ্বিতীয়টি ব্যবহার করে সংজ্ঞায়িত capture=true)
  • 1(এর সাথে প্রথম সংজ্ঞায়িত ইভেন্ট capture=false)
  • 3(এর সাথে দ্বিতীয় সংজ্ঞায়িত ইভেন্ট capture=false)

49
মৃত্যুদণ্ড অর্ডার নিশ্চিত নয় : no specification is made as to the order in which they will receive the event with regards to the other EventListeners on the EventTarget। আমি সমস্ত ব্রাউজার পরীক্ষা করে দেখিনি, তাই তারা সকলেই ঠিক একইভাবে এটি প্রয়োগ করতে পারে। ক্যাপচার ইভেন্টগুলি অবশ্য ক্যাপচার ইভেন্টগুলি করার আগেই করা হবে।
বিটগ্যামিট

47
@tjameson সঞ্চালনের ক্রম হয় DOM2 বৈশিষ্ট উত্তরসূরি নিশ্চিত, DOM3 ঘটনা : "বাস্তবায়ন বর্তমান টার্গেট এর নির্ধারণ করতে হবে প্রার্থী ঘটনা শ্রোতারা এই সব ঘটনা শ্রোতারা যে বর্তমান লক্ষ্যে নিবন্ধিত হয়েছে একটি তালিকা থাকতে হবে তাদের। নিবন্ধনের আদেশ। "
রব ডব্লু

1
সুতরাং এটি মূলত ইভেন্ট অনুক্রমের সাথে আমার অনুমান অনুসারে
কাজটি হয়েছে

1
@ স্লেয়ার, হ্যাঁ, একই ইভেন্টের একাধিক হ্যান্ডলারগুলি কার্যকর করা হয় সেই ক্রমে।
জেএমডি

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

272

আমি মনে করি এই চিত্রটি ক্যাপচার / টার্গেট / বুদ্বুদ পর্যায়গুলি বোঝার জন্য খুব দরকারী: http://www.w3.org/TR/2003/NOTE-DOM-Lelvel-3-Events-20031107/events.html#vents-phases

নীচে, লিঙ্কটি থেকে সামগ্রী বের করা হয়েছে।

দশা

গাছের গোড়া থেকে এই টার্গেট নোডের একটি পথ অনুসরণ করে ইভেন্টটি প্রেরণ করা হয়। এরপরে এটি স্থানীয়ভাবে লক্ষ্য নোড স্তরে বা গাছের চেয়ে কোনও লক্ষ্যের পূর্বপুরুষদের কাছ থেকে পরিচালনা করা যেতে পারে। ইভেন্ট প্রেরণ (যাকে ইভেন্ট প্রচারও বলা হয়) তিনটি পর্যায়ে এবং নিম্নলিখিত ক্রমে ঘটে:

  1. ক্যাপচার পর্ব: ইভেন্টটি গাছের গোড়া থেকে লক্ষ্য নোডের প্রত্যক্ষ পিতামাতার কাছে লক্ষ্য পাঠানো হয়।
  2. লক্ষ্য পর্যায়: ইভেন্টটি লক্ষ্য নোডে প্রেরণ করা হয়।
  3. বুদবুদ পর্ব: ইভেন্টটি লক্ষ্য নোডের সরাসরি পিতামাতার কাছ থেকে গাছের গোড়ায় লক্ষ্য পাঠানো হয়।

DOM ইভেন্ট প্রবাহ ব্যবহার করে একটি ইভেন্টের গ্রাফিকাল উপস্থাপনা DOM ট্রিতে প্রেরণ করা

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

কিছু ইভেন্ট অগত্যা ডিওএম ইভেন্ট প্রবাহের তিনটি পর্যায়টি সম্পন্ন করতে পারে না, যেমন ইভেন্টটি কেবলমাত্র এক বা দুটি পর্যায়ের জন্য সংজ্ঞায়িত করা যেতে পারে। উদাহরণস্বরূপ, এই স্পেসিফিকেশনে সংজ্ঞায়িত ইভেন্টগুলি সর্বদা ক্যাপচার এবং টার্গেটের পর্যায়গুলি সম্পাদন করবে তবে কিছু বুদবুদ পর্বটি সম্পাদন করবে না ("বুদবুদ ইভেন্ট" বনাম "নন-বুদবুদ ইভেন্টগুলি", ইভেন্ট.ববলস বৈশিষ্ট্যও দেখুন)।


1
খুব সুন্দর চিত্র!
অ্যালেক্স

1
টার্গেট নোডের বাচ্চাদের কীভাবে? তারা ইভেন্টটি কখন পায়?
অরিমাস

গাছের মূলটি আসলে Windowপরিবর্তে document, কারণ documentএটি একটি শিশু Window?
stackjlei

এই চিত্রটি অনেক সাহায্য করেছিল। ধন্যবাদ !
টমাস আন

1
আমি কেবল সমস্ত সংস্থানগুলি কামনা করি যা "কী" একটি "কেন" অন্তর্ভুক্ত করে তা ব্যাখ্যা করেছিল। যথারীতি আরও গুগলিংয়ের অফার।
এআআআআআআআআআআআআআআআআআআআআআআআআআআআআআ

80

ইভেন্ট ( useCapture = true) বনাম বাবল ইভেন্ট ( useCapture = false) ক্যাপচার করুন

MDN রেফারেন্স

  • বাবল ইভেন্টের আগে ক্যাপচার ইভেন্ট প্রেরণ করা হবে
  • ইভেন্ট প্রচারের আদেশ
    1. পিতামাতা ক্যাপচার
    2. বাচ্চাদের ক্যাপচার
    3. লক্ষ্য ক্যাপচার এবং লক্ষ্য বুদ্বুদ
      • ক্রম তারা নিবন্ধিত হয়েছে
      • উপাদানটি যখন ইভেন্টটির লক্ষ্য হয় তখন useCaptureপ্যারামিটারটি কিছু যায় আসে না (ধন্যবাদ @ বাম এবং @ কিংবদন্তি 80)
    4. বাচ্চাদের বুদবুদ
    5. পিতামাতা বুদ্বুদ
  • stopPropagation() প্রবাহ বন্ধ করবে

ক্যাপচার প্রবাহ ব্যবহার করুন

ডেমো

ফলাফল:

  1. পিতামাতা ক্যাপচার
  2. লক্ষ্য বুদবুদ ঘ

    (কারণ টার্গেটের ক্যাপচার এবং বুবলি তাদের নিবন্ধভুক্ত ক্রমে ট্রিগার করবে, সুতরাং ক্যাপচার ইভেন্টের আগে বাবল ইভেন্টটি ট্রিগার হবে)

  3. লক্ষ্য ক্যাপচার

  4. লক্ষ্য বুদ্বুদ 2
  5. পিতামাতা বুদ্বুদ

var parent = document.getElementById('parent'),
target = document.getElementById('target');

target.addEventListener('click', function (e) { 
console.log('Target Bubble 1');
// e.stopPropagation();
}, false);

target.addEventListener('click', function (e) { 
console.log('Target Capture');
// e.stopPropagation();
}, true);

target.addEventListener('click', function (e) { 
console.log('Target Bubble 2');
// e.stopPropagation();
}, false);

parent.addEventListener('click', function (e) { 
console.log('Parent Capture');
// e.stopPropagation();
}, true);

parent.addEventListener('click', function (e) { 
console.log('Parent Bubble');
// e.stopPropagation();
}, false);
<div id="parent">
    <button id="target" style="padding: 1em 0.8em;">
        Trigger event
    </button>
</div>


1
উদাহরণস্বরূপ একটি ভুল রয়েছে: আপনি ক্রমানুসারে শিশুদের ইভেন্টগুলি ঘোষণা করেছেন: 1. শিশু ক্যাপচার 2. শিশু বুদ্বুদ এটি গুরুত্বপূর্ণ! শিশু যদি ইভেন্টটির টার্গেট হয়ে থাকে তবে শ্রোতাদের একই ক্রমে ডাকা হবে। এমডিএন-তে নোটটি দেখুন: যখন উপাদানটি ইভেন্টটির 'ইউজক্যাপচার' প্যারামিটারের লক্ষ্য করে তখন কিছু আসে যায় না। ( ডেভেলপার.মোজিলা.আর.ইন-
ইউএস

1
দ্রষ্টব্য : ইভেন্ট শ্রমের সাথে সংযুক্ত ইভেন্ট শ্রোতাদের জন্য ইভেন্টটি ক্যাপচারিং ও বুদবুদ পর্যায়ের পরিবর্তে লক্ষ্য পর্বে রয়েছে। বিকাশকারী.মোজিলা.আর . / Events in the target phase will trigger all listeners on an element in the order they were registered, regardless of the useCapture parameter.এ- ইউএস / ডকস / ওয়েবে / এপিআই / ইভেন্ট ট্র্যাজেট / From সুতরাং "শিশু ক্যাপচার" এবং "শিশু বুদ্বুদ" এর কোনও ধাপ নেই।
কিংবদন্তি 80s

এবং এটি ব্যাখ্যা করে যে উদাহরণ চালানো কেন "শিশুদের ক্যাপচার" এর আগে "শিশুদের বুদ্বুদ 1" তৈরি করে, যখন ডায়াগ্রামটি পরামর্শ দেয় যে কোনও উপাদানটির জন্য সর্বদা "ক্যাপচার" হওয়া উচিত!
Gershom

18

আপনি যখন বলবেন ক্যাপচার = সত্য ঘটনাগুলি ক্যাপচার পর্যায়ে উপরে থেকে নিচে চালিত করে যখন মিথ্যা এটি কোনও বুদ্বুদ নীচে শীর্ষে করে।


11

এগুলি সমস্ত ইভেন্টের মডেল সম্পর্কে: http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-flow আপনি বুদবুদ পর্বে বা ক্যাপচারিং পর্যায়ে ইভেন্টটি ধরতে পারেন। তোমার পছন্দ.
কটাক্ষপাত http://www.quirksmode.org/js/events_order.html - আপনি এটা খুব দরকারী খুঁজে পাবেন।


1
ডাব্লু 3 এর লিঙ্কগুলি গুগল অনুসন্ধানের চেয়ে কম বা তেমন দরকারী যে আমি সেখানে কিছুই বুঝতে পারি না।
মুহাম্মদ উমার

3
হ্যাঁ, সেই ডব্লু 3 লিঙ্কটি কেবল বিশাল শব্দের একগুচ্ছ, তবে এর বিপরীতে, কুইর্কসমোড সাইটের দ্বিতীয় লিঙ্কটি বিষয়টি খুব ভাল এবং সংক্ষেপে ব্যাখ্যা করেছে।
স্টানো

11

কোড উদাহরণ:

<div id="div1" style="background:#9595FF">
  Outer Div<br />
  <div id="div2" style="background:#FFFFFF">
    Inner Div
  </div>
</div>

জাভাস্ক্রিপ্ট কোড:

d1 = document.getElementById("div1");
d2 = document.getElementById("div2");

যদি উভয়ই মিথ্যা হিসাবে সেট করা থাকে

d1.addEventListener('click',function(){alert("Div 1")},false);
d2.addEventListener('click',function(){alert("Div 2")},false);

সম্পাদন: অনার ক্লিক করে অভ্যন্তরীণ ডিভ, সতর্কতাগুলি প্রদর্শিত হয়: Div 2> Div 1

এখানে স্ক্রিপ্টটি অভ্যন্তরীণ উপাদান থেকে কার্যকর করা হয়েছে: ইভেন্ট বুদবুদ (ইউজক্যাপচারটি মিথ্যাতে সেট করা হয়েছে)

ডিভ 1 সত্যে সেট করা হয়েছে এবং ডিভ 2 টি মিথ্যাতে সেট করা আছে

d1.addEventListener('click',function(){alert("Div 1")},true);
d2.addEventListener('click',function(){alert("Div 2")},false);

এক্সিকিউটস: অনার ক্লিক করে ইনার ডিভ, সতর্কতাগুলি প্রদর্শিত হয়: ডিভ 1> ডিভ 2

এখানে স্ক্রিপ্টটি পূর্বপুরুষ / বাহ্যিক উপাদান থেকে কার্যকর করা হয়েছে: ইভেন্ট ক্যাপচারিং (ইউজক্যাপচারটি সত্যতে সেট করা হয়েছে)

ভাগ 1 মিথ্যাতে সেট করা হয় এবং ভাগ 2 সত্যকে সেট করা হয়

d1.addEventListener('click',function(){alert("Div 1")},false);
d2.addEventListener('click',function(){alert("Div 2")},true);

সম্পাদন: অনার ক্লিক করে অভ্যন্তরীণ ডিভ, সতর্কতাগুলি প্রদর্শিত হয়: Div 2> Div 1

এখানে স্ক্রিপ্টটি অভ্যন্তরীণ উপাদান থেকে কার্যকর করা হয়েছে: ইভেন্ট বুদবুদ (ইউজক্যাপচারটি মিথ্যাতে সেট করা হয়েছে)

ডিভ 1 সত্যে এবং ডিভ 2 সত্যে সেট করা আছে

d1.addEventListener('click',function(){alert("Div 1")},true);
d2.addEventListener('click',function(){alert("Div 2")},true);

এক্সিকিউটস: অনার ক্লিক করে ইনার ডিভ, সতর্কতাগুলি প্রদর্শিত হয়: ডিভ 1> ডিভ 2

এখানে স্ক্রিপ্টটি পূর্বপুরুষ / বাহ্যিক উপাদান থেকে কার্যকর করা হয়েছে: ইভেন্ট ক্যাপচারিং ইউজক্যাপচারটি সত্য হিসাবে সেট করা হয়েছে


1
এই প্রসঙ্গে "বৃহত্তর" শেভরনের অর্থ কী?
2540625

9

সারসংক্ষেপ:

DOMবৈশিষ্ট বর্ণিত:

https://www.w3.org/TR/2003/NOTE-DOM-Level-3-Events-20031107/events.html#Events-phases

নিম্নলিখিত পদ্ধতিতে কাজ করে:

documentগাছের মূল ( ) থেকে লক্ষ্য নোডের দিকে যাওয়ার পরে একটি ইভেন্ট প্রেরণ করা হয় । টার্গেট নোড হল সবচেয়ে গভীর HTMLউপাদান, যেমন ইভেন্ট.টারাগেট। ইভেন্ট প্রেরণ (যাকে ইভেন্ট প্রচারও বলা হয়) তিনটি পর্যায়ে এবং নিম্নলিখিত ক্রমে ঘটে:

  1. ক্যাপচার পর্ব: ইভেন্টটি গাছের গোড়া থেকে লক্ষ্য পূর্বপুরুষদের documentকাছে লক্ষ্য নোডের সরাসরি পিতামাতার কাছে প্রেরণ করা হয় ।
  2. লক্ষ্য পর্যায়: ইভেন্টটি লক্ষ্য নোডে প্রেরণ করা হয়। টার্গেট ফেজটি সর্বদা যে গভীরতম htmlউপাদানটির উপর ইভেন্টটি প্রেরণ করা হয়েছিল তার উপর।
  3. বুদবুদ পর্ব: ইভেন্টটি লক্ষ্য নোডের সরাসরি পিতামাতার কাছ থেকে গাছের গোড়ায় লক্ষ্য পাঠানো হয়।

ইভেন্ট বুদবুদ, ইভেন্ট ক্যাপচারিং, ইভেন্টের লক্ষ্য

উদাহরণ:

// bubbling handlers, third argument (useCapture) false (default)
document.getElementById('outerBubble').addEventListener('click', () => {
  console.log('outerBubble');
}, false)

document.getElementById('innerBubble').addEventListener('click', () => {
  console.log('innerBubble');
}, false)


// capturing handlers, third argument (useCapture)  true
document.getElementById('outerCapture').addEventListener('click', () => {
  console.log('outerCapture');
}, true)

document.getElementById('innerCapture').addEventListener('click', () => {
  console.log('innerCapture');
}, true)
div:hover{
  color: red;
  cursor: pointer;
}
<!-- event bubbling -->
<div id="outerBubble">
  <div id="innerBubble">click me to see Bubbling</div>
</div>


<!-- event capturing -->
<div id="outerCapture">
  <div id="innerCapture">click me to see Capturing</div>
</div>

উপরের উদাহরণটি সত্যই ইভেন্ট বুদবুদ এবং ইভেন্ট ক্যাপচারের মধ্যে পার্থক্যকে চিত্রিত করে। ইভেন্ট শ্রোতাদের সাথে যুক্ত করার সময় addEventListener, ইউজক্যাপচার নামে একটি তৃতীয় উপাদান রয়েছে। এটি booleanসেট করার trueপরে ইভেন্ট শ্রোতারা ইভেন্ট বুদবুদের পরিবর্তে ইভেন্ট ক্যাপচার ব্যবহার করতে দেয়।

আমাদের উদাহরণে যখন আমরা ব্যবহারের ক্যাপচার যুক্তিটি সেট করি তখন আমরা falseদেখতে পাই ইভেন্ট বুদবুদ হয়। প্রথমে লক্ষ্য পর্যায়ে ইভেন্টটি ফায়ার করা হয় (লগগুলি ইনারবাবল), এবং তারপরে ইভেন্টের বুদবুদ দিয়ে পিতামণ্ডলের উপাদানগুলিতে গুলি চালানো হয় (লগগুলি আউটডাবল))

আমরা যখন ব্যবহারের ক্যাপচার যুক্তিটি সেট করি তখন আমরা trueদেখতে পাই যে বাইরের ইভেন্টটি <div>প্রথমে গুলি চালানো হয়েছে। কারণ ইভেন্টটি এখন ক্যাপচারিং পর্বে চালিত হয়েছে বুদবুদ পর্বে নয়।


7

ইভেন্ট ভ্রমণের তিনটি পর্যায় দেওয়া :

  1. ক্যাপচার ফেজ : ইভেন্ট লক্ষ্য নোড প্রত্যক্ষ পিতা বা মাতা গাছের মূল থেকে টার্গেট এর পূর্বপুরুষ পাঠানো হয়।
  2. লক্ষ্য ফেজ : ইভেন্ট লক্ষ্য নোড পাঠানো হয়।
  3. সাড়া জাগানো ফেজ : ইভেন্ট গাছের শিকড় এর লক্ষ্য নোড প্রত্যক্ষ পিতা বা মাতা থেকে টার্গেট এর পূর্বপুরুষ পাঠানো হয়।

useCaptureনির্দেশ করে যেটি পর্যায়ক্রমে জন্য ইভেন্ট ভ্রমণ হবে:

তাহলে true, useCapture ইঙ্গিত ব্যবহারকারী ক্যাপচার ফেজ শুধুমাত্র অর্থাত এই ইভেন্টটি শ্রোতা লক্ষ্য এবং পর্যায়ক্রমে সাড়া জাগানো সময় আলোড়ন সৃষ্টি করা হইনি জন্য ইভেন্ট শ্রোতা যোগ করার জন্য শুভেচ্ছা পারে। যদি false, ইভেন্ট শ্রোতা কেবলমাত্র লক্ষ্য এবং বুদ্বুদ পর্যায়ের সময় চলবে

উত্স দ্বিতীয় সেরা উত্তরের মতোই: https://www.w3.org/TR/2003/NOTE-DOM-Level-3-Events-20031107/events.html#Events-phases


2

আইটেমগুলি একই স্তরে থাকলে কেবল সংজ্ঞাটির ক্রম বিবেচনা করে। আপনি যদি আপনার কোডটিতে সংজ্ঞাটির ক্রমটিকে বিপরীত করেন তবে আপনি একই ফলাফল পাবেন।

যাইহোক, আপনি যদি দুটি ইভেন্ট হ্যান্ডলারগুলিতে ব্যবহারের ক্যাপচার সেটিংসটি উল্টো করেন তবে শিশু ইভেন্ট হ্যান্ডলারটি পিতামাতার আগে তার প্রতিক্রিয়া জানায়। এর কারণ হ'ল চাইল্ড ইভেন্ট হ্যান্ডলারটি এখন ক্যাপচার পর্বে ট্রিগার করা হবে যা বুদবুদ পর্বের আগে, যেখানে প্যারেন্ট ইভেন্ট হ্যান্ডলারটি ট্রিগার করা হবে।

যদি আপনি উভয় ইভেন্ট হ্যান্ডলারের জন্য ব্যবহারের ক্যাপচারটিকে সত্য হিসাবে নির্ধারণ করেন - সংজ্ঞার অর্ডার নির্বিশেষে - পিতামাতার ইভেন্ট হ্যান্ডলারটি প্রথমে ট্রিগার করা হবে কারণ এটি ক্যাপচারিং পর্বে সন্তানের আগে আসে।

বিপরীতভাবে, যদি আপনি উভয় ইভেন্ট হ্যান্ডলারের জন্য মিথ্যা হিসাবে ক্যাপচার সেট করেন - আবার সংজ্ঞার আদেশ নির্বিশেষে - শিশু ইভেন্ট হ্যান্ডলারটি প্রথমে ট্রিগার করা হবে কারণ এটি বুদবুদ পর্বে অভিভাবকের সামনে আসে।

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