JavaScript इवेंट
फ्लैट के दरवाज़े पर एक घंटी है। बटन #bell है और उस पर press लिखा है। उसके नीचे #chime अभी silent कहता है। HTML में onclick एट्रिब्यूट नहीं है, इसलिए bell.onclick शुरू से null है।
पुराना जाल: JavaScript में typeof null का मान "object" होता है। इसलिए typeof bell.onclick भी "object" है, न "null" और न "undefined"। तुलना bell.onclick === null सही है।
onclick में फ़ंक्शन रखने से घंटी उसी वक्त नहीं बजती। चाइम silent रहता है, जब तक bell.click() उस फ़ंक्शन को न चलाए जो जगह में बैठा है। उस जगह में एक ही फ़ंक्शन रहता है। दूसरा लिखोगे तो पहला हट जाता है। एक क्लिक दोनों को नहीं चलाता। addEventListener अगला पन्ना है; वहाँ श्रोता एक के ऊपर एक बैठते हैं। यह पन्ना उसे नहीं बुलाता।
bell.onclick = null जगह खाली कर देता है। उसके बाद क्लिक चाइम को नहीं छूता। फ़ंक्शन के अंदर this वही बटन है, इसलिए this.id bell है। बटन का शब्द press ही रहता है। पन्ने की स्क्रिप्ट एक बार click करती है। घंटी के नीचे की पंक्ति है dong / 1 / bell। यहाँ एलिमेंट नहीं बनता और CSS प्रॉपर्टी नहीं लिखी जाती।
बटन पर एक जगह
पिछला पन्ना createElement से li नोड बनाता था और append, prepend, insertBefore से उन्हें रखता था। यहाँ नोड नहीं बनता और children नहीं पढ़ा जाता। उससे पहले के पन्ने ने रंग की पट्टी पर style और classList लिखा था। यहाँ style नहीं दिया जाता। getElementById सिर्फ बटन और पैराग्राफ देता है। नई बात onclick प्रॉपर्टी है: एक फ़ंक्शन, या null।
जगह में क्या है
बटन press से शुरू होता है और नीचे silent है। पंक्तियाँ क्रम से पढ़ो। हर टुकड़ा उसी ताज़े बटन से शुरू होता है, सिवाय पन्ने वाली पंक्ति के, जो नीचे का डेमो है। वह डेमो null नहीं रखता।
📊 जगह में क्या है
| पल | onclick में क्या है |
घंटी का पाठ | आसान चूक |
|---|---|---|---|
| किसी असाइनमेंट से पहले | null; typeof है "object" |
silent | typeof को "null" पढ़ना |
ding फ़ंक्शन के बाद, click से पहले |
एक फ़ंक्शन | silent | समझना कि असाइनमेंट ही बजा देता है |
ding के साथ click के बाद |
वही फ़ंक्शन | ding | बटन का पाठ ding हो जाना |
dong, ding की जगह लेता है, फिर एक click |
dong फ़ंक्शन, ding नहीं | dong | दोनों फ़ंक्शन चलना |
onclick = null, फिर click, ताज़ा बटन |
null; typeof है "object" |
silent | खाली जगह का फिर बजना |
पन्ने की स्क्रिप्ट, एक click |
एक फ़ंक्शन; this.id है bell |
dong | पंक्ति का silent पर खत्म होना |
onclick एलिमेंट की प्रॉपर्टी है। हैंडलर न हो तो मान null है, और typeof null फिर भी "object" है। जगह खाली है यह जानने के लिए === null लगाओ। असाइनमेंट फ़ंक्शन को रखता है। उसे बुलाता नहीं। bell.click() एक क्लिक भेजता है और उसी फ़ंक्शन को चलाता है जो उस वक्त जगह में है। बटन का अपना पाठ नहीं बदलता। दूसरा असाइनमेंट प्रॉपर्टी के ऊपर लिख देता है। पहले फ़ंक्शन का नाम रख लिया हो तो वह ऑब्जेक्ट मेमोरी में रहता है, पर प्रॉपर्टी अब उसकी ओर नहीं देखती। onclick = null हैंडलर हटा देता है। HTML का onclick एट्रिब्यूट भी यही जगह भरता; इस बटन पर वह एट्रिब्यूट नहीं है। ऐरो फ़ंक्शन इस जगह में this को बटन नहीं बनाता। यह पन्ना साधारण function रखता है।
जगह शुरू में खाली है
फ़ाइल बटन और पैराग्राफ से खुलती है। अभी कुछ असाइन नहीं हुआ। ये चार लॉग प्रॉपर्टी, उसका typeof, घंटी का पाठ, और बटन का शब्द पूछते हैं।
let bell = document.getElementById("bell");
let chime = document.getElementById("chime");
console.log(bell.onclick);
console.log(typeof bell.onclick);
console.log(chime.textContent);
console.log(bell.textContent);
नतीजे: null, object, silent, और press। जगह खाली है। typeof शब्द null नहीं छापता। बटन और पैराग्राफ अभी मार्कअप के शब्द दिखाते हैं।
फ़ंक्शन इंतज़ार करता है
onclick = function ... फ़ंक्शन को रख देता है। बॉडी उस पंक्ति पर नहीं चलती। घंटी अभी silent है और प्रॉपर्टी अब null नहीं है।
let bell = document.getElementById("bell");
let chime = document.getElementById("chime");
bell.onclick = function () {
chime.textContent = "ding";
};
console.log(typeof bell.onclick);
console.log(chime.textContent);
console.log(bell.onclick === null);
नतीजे: function, silent, और false। जगह में फ़ंक्शन दिखता है। पैराग्राफ नहीं बदला, क्योंकि फ़ंक्शन को किसी ने बुलाया नहीं।
click वही एक चलाता है
bell.click() मौजूदा हैंडलर चलाता है। घंटी ding हो जाती है। बटन का पाठ press रहता है। क्लिक के बाद भी जगह में फ़ंक्शन रहता है।
let bell = document.getElementById("bell");
let chime = document.getElementById("chime");
bell.onclick = function () {
chime.textContent = "ding";
};
bell.click();
console.log(chime.textContent);
console.log(bell.textContent);
console.log(typeof bell.onclick);
नतीजे: ding, press, और function। एक क्लिक, एक बदलाव, और बदलाव पैराग्राफ में है। शब्द press अभी बटन पर है।
दूसरा फ़ंक्शन पहले की जगह लेता है
यह टुकड़ा फिर ताज़े बटन से शुरू होता है। पहले ding रखा जाता है, फिर dong उसके ऊपर लिखा जाता है, और उसके बाद एक click आता है। दोनों असाइनमेंट के बीच क्लिक नहीं है, इसलिए इस दौड़ में घंटी कभी ding नहीं होती। क्लिक के बाद वह dong है। bell.onclick === ding false है। bell.onclick === dong true है।
let bell = document.getElementById("bell");
let chime = document.getElementById("chime");
function ding() {
chime.textContent = "ding";
}
function dong() {
chime.textContent = "dong";
}
bell.onclick = ding;
bell.onclick = dong;
bell.click();
console.log(bell.onclick === ding);
console.log(bell.onclick === dong);
console.log(chime.textContent);
नतीजे: false, true, और dong। नाम ding अभी भी एक फ़ंक्शन की ओर देखता है। प्रॉपर्टी नहीं। एक क्लिक ने सिर्फ dong चलाया।
null जगह खाली करता है
इसे ताज़े बटन पर चलाओ। फ़ंक्शन रखा जाता है और किसी क्लिक से पहले मिटा दिया जाता है। null के बाद bell.click() dong नहीं लिखता। घंटी silent रहती है। typeof फिर object है, क्योंकि मान null है।
let bell = document.getElementById("bell");
let chime = document.getElementById("chime");
bell.onclick = function () {
chime.textContent = "dong";
};
bell.onclick = null;
bell.click();
console.log(bell.onclick);
console.log(typeof bell.onclick);
console.log(chime.textContent);
नतीजे: null, object, और silent। जो फ़ंक्शन dong लिखता, वह क्लिक के वक्त जगह में नहीं है। नीचे का पन्ना जगह खाली नहीं करता।
घंटी के नीचे एक पंक्ति
स्क्रिप्ट body के अंत में है, बटन और पैराग्राफ के बाद। वह एक फ़ंक्शन रखती है और एक बार click बुलाती है। फ़ंक्शन के अंदर taps 0 से 1 होता है, घंटी dong होती है, और this.id bell.dataset.who में लिखी जाती है। पंक्ति घंटी का पाठ, गिनती, और वह id जोड़ती है। बटन का पाठ नहीं लिखती।
<!DOCTYPE html>
<html>
<head>
<title>events — page</title>
</head>
<body>
<button id="bell" type="button">press</button>
<p id="chime">silent</p>
<p id="line">…</p>
<script>
let bell = document.getElementById("bell");
let chime = document.getElementById("chime");
let taps = 0;
bell.onclick = function () {
taps = taps + 1;
chime.textContent = "dong";
bell.dataset.who = this.id;
};
bell.click();
document.getElementById("line").textContent =
chime.textContent + " / " + taps + " / " + bell.dataset.who;
</script>
</body>
</html>
पंक्ति बनती है dong / 1 / bell। घंटी dong है, silent नहीं। संख्या 1 है, क्योंकि स्क्रिप्ट एक बार क्लिक करती है। आखिरी टोकन बटन की id है, हैंडलर के अंदर के this से, शब्द press नहीं। बटन पर अभी press है। अगला पन्ना इवेंट लिसनर का है। उसका मुख्य औज़ार यह एक onclick जगह नहीं है।
पाँच जाँच
onclick,typeof bell.onclick, घंटी का पाठ, और बटन का पाठ पढ़ो। मान: null, object, silent, और press।- ding फ़ंक्शन रखो और क्लिक मत करो।
typeoffunction है, घंटी silent है, औरonclick === nullfalse है। - उसी ding फ़ंक्शन के साथ
bell.click()बुलाओ। घंटी ding है, बटन press है, औरtypeoffunction है। - पहले ding, फिर dong, फिर एक क्लिक।
onclick === dingfalse है,onclick === dongtrue है, और घंटी dong है। - ताज़े बटन पर फ़ंक्शन रखो,
onclickको null करो, फिर क्लिक करो। मान: null, object, और silent। पन्ने की पंक्ति: dong / 1 / bell।
यह घंटी कहाँ धोखा देती है
बटन पर अभी press है। जगह में गलत फ़ंक्शन था, या जगह खाली थी।
typeof bell.onclickको"null"पढ़ना, जब मानnullहो- यह उम्मीद कि असाइनमेंट खुद घंटी को ding कर दे
- दूसरे असाइनमेंट के बाद एक क्लिक पर
dingऔरdongदोनों के चलने की उम्मीद - बटन का पाठ ding हो जाए, यह उम्मीद
onclick = nullके बाद भीclickघंटी बदले, यह उम्मीद- ऐरो फ़ंक्शन रखकर
this.idके bell होने की उम्मीद - यहाँ
event.targetपढ़ना; इन फ़ंक्शनों का कोई आर्ग्युमेंट नहीं, इवेंट ऑब्जेक्ट बाद का पन्ना है - यहाँ
addEventListenerबुलाना; अगला पन्ना श्रोताओं को जमा करता है - बटन
createElementसे बनाना; वह पिछला पन्ना था - पंक्ति को silent / 0 / press पढ़ना
ये साथ ले जाओ
- हैंडलर न हो तो
bell.onclicknull है औरtypeof bell.onclickobject है - फ़ंक्शन रखने से घंटी
clickतक silent रहती है - ding फ़ंक्शन के साथ
bell.click()घंटी को ding करता है और बटन press छोड़ता है - दूसरा असाइनमेंट पहले की जगह लेता है, इसलिए एक क्लिक सिर्फ dong चलाता है
- ताज़े बटन पर
onclick = nullके बादclickघंटी को silent छोड़ता है - पन्ने की पंक्ति dong / 1 / bell है, और हैंडलर के अंदर
this.idbell है
🧠 अपने ज्ञान की परीक्षा करें
अपने ज्ञान की परीक्षा करें
इस इंटरैक्टिव क्विज़ के साथ अपनी चुनौती लें और देखें कि आप विषय को कितनी अच्छी तरह समझते हैं
📝 निर्देश
- हर प्रश्न को ध्यान से पढ़ें
- हर प्रश्न के लिए सबसे अच्छा उत्तर चुनें
- आप जितनी बार चाहें क्विज़ दोबारा दे सकते हैं
- आपकी प्रगति शीर्ष पर दिखाई जाएगी