सूची आयटम हटवताना JavaScript त्रुटींचे निराकरण करणे

सूची आयटम हटवताना JavaScript त्रुटींचे निराकरण करणे
सूची आयटम हटवताना JavaScript त्रुटींचे निराकरण करणे

Todo ॲपमधील सूची आयटम काढताना सामान्य JavaScript त्रुटी

डायनॅमिक टू-डू लिस्ट किंवा तत्सम ॲप्लिकेशन तयार करण्यामध्ये JavaScript फंक्शन्सद्वारे सूची आयटम जोडणे आणि काढून टाकणे समाविष्ट असते.

तथापि, तुम्हाला निराशाजनक त्रुटी संदेश येऊ शकतो: "न पकडलेली संदर्भ त्रुटी: deleteListItemByIndex HTMLDivElement.onclick वर परिभाषित केलेले नाही". यामुळे काय चूक झाली हे समजून घेणे आव्हानात्मक बनू शकते, विशेषत: जेव्हा असे दिसते की सर्वकाही ठिकाणी आहे. 😕

अशा समस्या सहसा किरकोळ कोड तपशीलांमुळे उद्भवतात ज्याकडे दुर्लक्ष करणे सोपे असते, जसे की फंक्शन स्कोप किंवा व्हेरिएबल डिक्लेरेशन समस्या. या छोट्या समस्यांचे निराकरण केल्याने तुम्हाला तुमचा JavaScript ऍप्लिकेशन पुन्हा सुरळीतपणे कार्य करण्यास मदत होऊ शकते.

या मार्गदर्शकामध्ये, आम्ही विशिष्ट त्रुटी परिस्थिती एक्सप्लोर करू, ती का उद्भवते हे समजून घेऊ आणि उपाय प्रदान करू JavaScript फंक्शन्स अपेक्षेप्रमाणे काम करा. वाटेत, आम्ही सूची आयटम हाताळण्यासाठी आणि भविष्यात तत्सम समस्या टाळण्यासाठी सर्वोत्तम पद्धतींवर देखील चर्चा करू.

आज्ञा वापराचे उदाहरण
closest() ही पद्धत निवडलेल्या घटकामधून DOM ट्री शोधते जे निर्दिष्ट निवडकर्त्याशी जुळणारे सर्वात जवळचे पूर्वज शोधते. उदाहरणार्थ, event.target.closest('.delete-button') क्लिक केलेले घटक किंवा त्याच्या पूर्वजांपैकी एकाकडे .delete-बटण वर्ग आहे का ते तपासते, ज्यामुळे इव्हेंट हाताळणी कार्यक्षमतेने सोपवण्यासाठी ते आदर्श बनते.
replace() id विशेषता मधून नॉन-न्यूमेरिक भाग काढून टाकण्यासाठी येथे वापरले. उदाहरणार्थ, attrIdValue.replace('items-', '') घटकाच्या आयडीचा अंकीय भाग जसे की "आयटम-3" काढतो, ज्यामुळे आम्हाला ॲरेमधील संबंधित अनुक्रमणिका सहजपणे संदर्भित करता येते.
splice() ही पद्धत स्थानामध्ये घटक जोडून, ​​काढून टाकून किंवा पुनर्स्थित करून ॲरे बदलते. आमच्या संदर्भात, listItems.splice(index, 1) चा वापर ॲरेमधील इंडेक्सवर आधारित विशिष्ट आयटम हटवण्यासाठी केला जातो, जो नंतर स्थानिक स्टोरेजमध्ये अपडेट केला जातो.
JSON.parse() JSON स्ट्रिंगला JavaScript ऑब्जेक्टमध्ये पार्स करते, स्थानिक स्टोरेजमध्ये संचयित केलेला ॲरे डेटा पुनर्प्राप्त करण्यासाठी आवश्यक. हे listItems = JSON.parse(localStorage.getItem('keyName')) ला JSON डेटा पुन्हा मॅनिपुलेबल ॲरेमध्ये रूपांतरित करण्यास अनुमती देते.
JSON.stringify() JavaScript ऑब्जेक्ट किंवा ॲरेला JSON स्ट्रिंगमध्ये रूपांतरित करते. उदाहरणार्थ, localStorage.setItem('keyName', JSON.stringify(listItems)) अद्यतनित केलेले ॲरे पुन्हा लोकल स्टोरेजमध्ये एका फॉरमॅटमध्ये सेव्ह करते जे नंतर सहज मिळवता येते.
fs.readFile() Node.js मध्ये, ही पद्धत असिंक्रोनसपणे फाईलमधील डेटा वाचते. येथे, fs.readFile('data.json', 'utf8', callback) पर्सिस्टंट स्टोरेजसाठी बॅकएंड डेटा हाताळण्यासाठी फाईलमधील JSON डेटा वाचतो, ज्यामुळे फाइलमध्ये सतत स्टोरेज अपडेट्स मिळू शकतात.
fs.writeFile() ही Node.js पद्धत फाईलमधील डेटा लिहिते किंवा ओव्हरराईट करते. fs.writeFile('data.json', JSON.stringify(listItems), कॉलबॅक) वापरून, ते अद्यतनित सूची आयटम हटविल्यानंतर data.json मध्ये संग्रहित करते, सत्रांमध्ये सातत्यपूर्ण स्टोरेज सुनिश्चित करते.
querySelector() CSS सिलेक्टरशी जुळणारा पहिला DOM घटक निवडण्यासाठी वापरला जातो. येथे, document.querySelector('#listContainer') कंटेनर घटकाशी इव्हेंट श्रोता संलग्न करते, ज्यामुळे ते डायनॅमिकली व्युत्पन्न केलेल्या सूचींमध्ये इव्हेंट डेलिगेशनसाठी आदर्श बनते.
addEventListener() एका घटकावर इव्हेंट हँडलरची नोंदणी करते, एकाधिक इव्हेंट प्रभावीपणे व्यवस्थापित करण्याची अनुमती देते. उदाहरणार्थ, document.querySelector('#listContainer').addEventListener('क्लिक', कॉलबॅक) सर्व डिलीट बटणे डायनॅमिक पद्धतीने व्यवस्थापित करण्यासाठी कंटेनरवर सिंगल क्लिक इव्हेंट हँडलर सेट करतो.
expect() जेस्ट सारख्या चाचणी फ्रेमवर्कमध्ये, expect() हे सत्यापित करते की दिलेल्या फंक्शनने अपेक्षित परिणाम दिलेला आहे. उदाहरणार्थ, लोकलस्टोरेजमधून आयटम हटवल्याने योग्य उर्वरित आयटम मिळतो की नाही हे तपासते (अपडेट केलेले आयटम).

सूची आयटम हटवण्यासाठी JavaScript उपाय समजून घेणे

या JavaScript सोल्यूशनमध्ये, डिलीट बटणावर क्लिक केल्यावर टू-डू लिस्टमधील "li" घटक हटवणे हे मुख्य उद्दिष्ट आहे. DeleteListItemByIndex फंक्शन डीओएम आणि वरून आयटम काढून टाकून हे साध्य करण्यासाठी डिझाइन केले आहे स्थानिक स्टोरेज. येथे एक महत्त्वाचा पैलू समजून घेणे आहे त्रुटी हाताळणी आणि कार्यक्षम घटक लक्ष्यीकरण आम्ही फंक्शन वापरून सेट केले. ही पद्धत लोकल स्टोरेजमधील सूची आयटमचे अस्तित्व तपासते, त्यामुळे पृष्ठ रीफ्रेश केल्यानंतरही कोणतेही बदल कायम राहतात. हा दृष्टीकोन सुनिश्चित करतो की सूची सुसंगत राहते, परंतु जर deleteListItemByIndex बटणाच्या क्लिक इव्हेंटला योग्यरित्या बंधनकारक नसेल तर गहाळ कार्य त्रुटी उद्भवते. ही त्रुटी स्पष्ट कार्य व्याख्या आणि योग्य इव्हेंट हाताळणीची आवश्यकता हायलाइट करते. 🛠️

फंक्शन हटवण्यासाठी योग्य आयटम ओळखण्यासाठी सर्वात जवळचा आयडी वापरण्यावर अवलंबून आहे, इंडेक्स व्हॅल्यू वेगळे करण्यासाठी आयडी स्ट्रिंग काढून टाकणे. उदाहरणार्थ, "आयटम-३" सारखा आयडी "३" काढण्यासाठी पार्स केला जातो, जो सूची आयटमच्या इंडेक्सशी संबंधित आहे. ही पद्धत आदर्श आहे जेव्हा आयडी सेट नामकरण पद्धतीचे अनुसरण करतात आणि ॲरेमध्ये आयटम शोधण्याचा एक द्रुत मार्ग प्रदान करतात. आयडी मधून "आयटम-" चे विश्लेषण करण्यासाठी रिप्लेस वापरणे नवशिक्यांसाठी थोडे अवघड असू शकते परंतु अशा सूची ऑपरेशन्ससाठी एक सामान्य दृष्टीकोन आहे. एकदा इंडेक्स ओळखला गेला की, listItems ॲरेमध्ये प्रवेश केला जातो आणि या निर्देशांकावर आधारित स्प्लाईस विशिष्ट आयटम काढून टाकतो, प्रत्येक ऑपरेशनमध्ये फक्त एक आयटम हटवला जाईल याची खात्री करून.

ॲरेमध्ये बदल केल्यानंतर, स्क्रिप्ट JSON.stringify वापरून ते परत JSON फॉरमॅटमध्ये रूपांतरित करते, ज्यामुळे ते पुन्हा लोकल स्टोरेजमध्ये सेव्ह केले जाऊ शकते. अद्यतनित listItems ॲरे स्टोरेजमधील मागील आवृत्तीची जागा घेते, त्यामुळे तुम्ही रीलोड केल्यावर, हटवलेले आयटम यापुढे दिसत नाहीत. ही प्रक्रिया JavaScript सह डेटा व्यवस्थापित करण्यात JSON.parse आणि JSON.stringify या दोन्हींची महत्त्वपूर्ण भूमिका हायलाइट करते. ते मूलभूत आदेश आहेत जे आम्हाला आमच्या ॲरे स्ट्रक्चरची देखभाल करण्यास आणि स्टोरेजमध्ये सेव्ह केल्यावर डेटा अखंडता सुनिश्चित करण्यास अनुमती देतात. प्रत्येक सूची आयटम हटवला जात असताना, फंक्शन शेवटी DOM ट्री मधून removeChild पद्धतीसह आयटम काढून टाकते, वापरकर्त्याचा इंटरफेस ही अद्यतने त्वरित प्रतिबिंबित करते याची खात्री करून. 📝

कार्यप्रदर्शन आणि कार्यक्षमता वाढवण्यासाठी, कोड इव्हेंट डेलिगेशन वापरतो. प्रत्येक डिलीट बटणावर वैयक्तिक क्लिक इव्हेंट जोडण्याऐवजी, आम्ही सूची कंटेनरमध्ये एक संलग्न करतो आणि त्यास नियुक्त करतो. अशा प्रकारे, जेव्हा कोणतेही हटवा बटण क्लिक केले जाते, तेव्हा इव्हेंट श्रोता लक्ष्यित आयटमसह deleteListItemByIndex चालवतो, स्क्रिप्ट जलद बनवते, विशेषतः मोठ्या सूचीसाठी. ही पद्धत प्रत्येक वेळी नवीन सूची आयटम तयार केल्यावर घटनांचे पुनर्बाइंडिंग टाळते. जेस्ट सारख्या साधनांसह चाचणी केल्याने फंक्शन योग्यरित्या कार्य करते याची पडताळणी करू शकते, विकासाच्या सुरुवातीच्या काळात कोणतीही समस्या पकडते. हा दृष्टीकोन आणि चाचणी हे सुनिश्चित करते की तुमची कार्य सूची चांगली कामगिरी करते, स्पष्ट, कार्यक्षम कोड रचना राखून एक अखंड वापरकर्ता अनुभव प्रदान करते.

सूची आयटम हटवताना JavaScript त्रुटी हाताळणे: एक डायनॅमिक फ्रंट-एंड दृष्टीकोन

DOM मॅनिपुलेशन आणि एरर हँडलिंग वापरून JavaScript सोल्यूशन

// JavaScript solution for deleting an 'li' element with error handling
// This script handles deletion with proper function scoping
function deleteListItemByIndex(event) {
    try {
        const attrIdValue = event.target.parentNode.getAttribute('id');
        if (!attrIdValue) throw new Error('ID not found on element');
        const index = Number(attrIdValue.replace('items-', ''));
        if (isNaN(index)) throw new Error('Invalid index format');
        let listItems = JSON.parse(localStorage.getItem('keyName')) || [];
        listItems.splice(index, 1);
        localStorage.setItem('keyName', JSON.stringify(listItems));
        event.target.parentNode.remove();
    } catch (error) {
        console.error('Error deleting item:', error);
    }
}

इव्हेंट डेलिगेशन आणि फंक्शन बाइंडिंगसह मॉड्यूलर JavaScript सोल्यूशन

जावास्क्रिप्ट सोल्यूशन रिबाइंडिंग टाळण्यासाठी इव्हेंट डेलिगेशन वापरणे

पर्सिस्टंट आयटम डिलीट करण्यासाठी बॅकएंड Node.js सोल्यूशन

पर्सिस्टंट स्टोरेजसाठी एक्सप्रेस आणि लोकलस्टोरेज वापरून Node.js बॅकएंड सोल्यूशन

const express = require('express');
const fs = require('fs');
const app = express();
app.use(express.json());

app.post('/delete-item', (req, res) => {
    const { index } = req.body;
    fs.readFile('data.json', 'utf8', (err, data) => {
        if (err) return res.status(500).send('Error reading data');
        let listItems = JSON.parse(data);
        listItems.splice(index, 1);
        fs.writeFile('data.json', JSON.stringify(listItems), (err) => {
            if (err) return res.status(500).send('Error saving data');
            res.send('Item deleted');
        });
    });
});

app.listen(3000, () => console.log('Server running on port 3000'));

जेस्टसह चाचणी: डिलीट फंक्शनसाठी फ्रंट-एंड युनिट चाचणी

फ्रंट-एंड कार्यक्षमतेसाठी जेस्टसह JavaScript युनिट चाचणी

import { deleteListItemByIndex } from './path/to/file';
describe('deleteListItemByIndex', () => {
    test('deletes item from localStorage based on index', () => {
        const event = { target: { parentNode: { getAttribute: () => 'items-1' }}};
        localStorage.setItem('keyName', JSON.stringify(['Item1', 'Item2', 'Item3']));
        deleteListItemByIndex(event);
        const updatedItems = JSON.parse(localStorage.getItem('keyName'));
        expect(updatedItems).toEqual(['Item1', 'Item3']);
    });
});

त्रुटी प्रतिबंधक तंत्रांसह JavaScript सूची व्यवस्थापन वाढवणे

मध्ये डायनॅमिक सूची आयटमसह काम करताना JavaScript, करायच्या सूचीप्रमाणे, प्रत्येक सूची आयटमसाठी इव्हेंट व्यवस्थापित करण्यासाठी विश्वसनीय दृष्टीकोन असणे आवश्यक आहे. एक सामान्य समस्या म्हणजे फंक्शन संदर्भांचे अपघाती नुकसान किंवा कॉलिंग त्रुटी, जसे की "न सापडलेली संदर्भ त्रुटी"आम्ही संबोधित करत आहोत. या समस्येस प्रतिबंध करणारी एक बाब म्हणजे मॉड्यूलर फंक्शन्ससह कोड आयोजित करणे. उदाहरणार्थ, प्रत्येक फंक्शन स्वतंत्रपणे परिभाषित करणे आणि त्यास इव्हेंटसह स्पष्टपणे संबद्ध करणे हे सुनिश्चित करते की आयटम हटविला जातो तेव्हा तुम्हाला गहाळ संदर्भ येत नाहीत. आणखी एक प्रभावी दृष्टीकोन म्हणजे मूळ घटकांशी संलग्न इव्हेंट श्रोत्यांना गतिमानपणे घटनांना बंधनकारक करणे. हे तंत्र, म्हणून ओळखले जाते कार्यक्रम प्रतिनिधी मंडळ, वारंवार जोडल्या किंवा काढल्या जाऊ शकतील अशा घटकांशी व्यवहार करताना विशेषतः उपयुक्त आहे.

त्रुटी व्यवस्थापित करण्यासाठी तुमच्या फंक्शनमध्ये सशर्त तपासणी वापरणे ही दुसरी महत्त्वाची बाब आहे. घटक किंवा आयडी हटवण्याचा प्रयत्न करण्यापूर्वी त्याचे अस्तित्व तपासण्यासाठी फंक्शन जोडल्याने रनटाइम त्रुटी टाळता येऊ शकतात. इव्हेंट डेलिगेशनसह, आम्ही इव्हेंट रीबाइंडिंगची आवश्यकता देखील कमी करतो, ज्यामुळे कार्यप्रदर्शन अधिक ऑप्टिमाइझ होऊ शकते. वापरून localStorage सूची डेटा टिकवून ठेवण्यासाठी, तुम्ही ॲपचा डेटा सर्व सत्रांमध्ये कायम ठेवता. परंतु स्थानिक स्टोरेज डेटासाठी प्रमाणीकरण पद्धती लागू करणे तितकेच महत्त्वाचे आहे, कारण अनपेक्षित वापरकर्त्याच्या वर्तनामुळे डेटा फॉरमॅट किंवा स्ट्रक्चरमध्ये समस्या उद्भवू शकतात.

शेवटी, त्रुटी हाताळणे लवचिकता प्रदान करते. जोडत आहे फंक्शनच्या मुख्य भागांभोवतीचे ब्लॉक्स अनपेक्षित वर्तन सुंदरपणे व्यवस्थापित करण्यात मदत करतात. उदाहरणार्थ, सूची आयटमचा आयडी सापडला नाही तर, मध्ये सानुकूल त्रुटी टाकणे catch ब्लॉक डीबगिंगसाठी अर्थपूर्ण अभिप्राय देऊ शकतो. या रणनीती, एकत्रित केल्यावर, आम्हाला JavaScript-आधारित सूची व्यवस्थापन सुधारण्यास अनुमती देतात आणि वापरकर्ता परस्परसंवाद जसे की हटवणे सुरळीतपणे चालते याची खात्री करून. थोडक्यात, मॉड्यूलर डिझाइन, इव्हेंट डेलिगेशन आणि संरचित त्रुटी हाताळणीचे संयोजन JavaScript सूची अनुप्रयोगांची उपयोगिता आणि लवचिकता वाढवते. 🔧

JavaScript सूची हटवणे आणि त्रुटींबद्दल सामान्य प्रश्न

  1. सूची आयटम हटवताना "न पकडलेली संदर्भ त्रुटी" का येते?
  2. जेव्हा JavaScript शोधू शकत नाही तेव्हा ही त्रुटी होते deleteListItemByIndex रनटाइमवर फंक्शन, अनेकदा गहाळ फंक्शन संदर्भामुळे किंवा अयोग्य इव्हेंट हाताळणीमुळे.
  3. इव्हेंट डेलिगेशन म्हणजे काय आणि ते सूचीसाठी का उपयुक्त आहे?
  4. इव्हेंट डेलिगेशनमध्ये एकल इव्हेंट श्रोता वैयक्तिक घटकांऐवजी मूळ घटकाशी संलग्न करणे समाविष्ट असते, ज्यामुळे ते गतिशीलपणे जोडलेल्या घटकांसाठी कार्यक्षम बनते.
  5. मी सर्व सत्रांमध्ये सूची डेटा सुसंगत कसा ठेवू शकतो?
  6. वापरत आहे localStorage पृष्ठ रिफ्रेश केल्यानंतरही डेटा टिकवून ठेवण्याची खात्री करून, तुम्हाला सूची डेटा संचयित करण्याची अनुमती देते.
  7. काय करते आणि JSON.stringify करू?
  8. JSON स्ट्रिंगला परत JavaScript ऑब्जेक्टमध्ये रूपांतरित करते, तर JSON.stringify ऑब्जेक्टला JSON स्ट्रिंगमध्ये रूपांतरित करते, वरून सूची डेटा संचयित करण्यासाठी आणि पुनर्प्राप्त करण्यासाठी आवश्यक localStorage.
  9. एरर हाताळणी माझी JavaScript फंक्शन्स कशी सुधारू शकते?
  10. जोडत आहे ब्लॉक्स कृपापूर्वक त्रुटी व्यवस्थापित करण्यात मदत करते, अनपेक्षित रनटाइम समस्यांना प्रतिबंधित करते आणि काहीतरी चूक झाल्यास उपयुक्त अभिप्राय प्रदान करते.
  11. माझे डिलीट फंक्शन चुकीची यादी आयटम का हटवते?
  12. तुम्ही आयटमचा आयडी योग्यरित्या पार्स करत आहात आणि हटवताना योग्य निर्देशांकात प्रवेश करत असल्याची खात्री करा. वापरत आहे replace आयडी स्ट्रिंगवर तुम्हाला योग्य इंडेक्स मिळाल्याची खात्री होते.
  13. रिबाइंड न करता मी गतिकरित्या इव्हेंट कसे जोडू आणि काढू शकतो?
  14. वापरत आहे event delegation तुम्हाला कंटेनरमध्ये इव्हेंट संलग्न करू देते, त्यामुळे डिलीट बटणांसारखे मूल घटक वैयक्तिक बाइंडिंगशिवाय फंक्शन ट्रिगर करतील.
  15. मॉड्यूलर JavaScript फंक्शन्सचे फायदे काय आहेत?
  16. मॉड्युलर फंक्शन्स कोडबेस स्पष्ट करतात, डीबगिंग सुलभ करतात आणि प्रत्येक फंक्शनची एकच जबाबदारी असल्याचे सुनिश्चित करतात, त्रुटींची शक्यता कमी करते.
  17. सूची आयटम हटवण्यासाठी मी माझ्या JavaScript कोडची चाचणी कशी करू शकतो?
  18. सारखे चाचणी फ्रेमवर्क वापरणे Jest सूची हटवणे योग्यरित्या कार्य करते आणि अनपेक्षित चुका होत नाहीत याची पुष्टी करण्यासाठी तुम्हाला युनिट चाचण्या लिहिण्याची परवानगी देते.
  19. मी अस्तित्वात नसलेली आयटम हटवण्यापासून कसे रोखू शकतो?
  20. हटवण्यापूर्वी एक सशर्त तपासणी जोडा, आयटमचा आयडी अस्तित्वात असल्याची खात्री करून घ्या किंवा अ समाविष्ट करा अशा केसेस कृपापूर्वक हाताळण्यासाठी ब्लॉक करा.
  21. मी माझ्या डिलीट फंक्शनमध्ये रिप्लेस का वापरावे?
  22. replace पद्धत आयडी स्ट्रिंगचे नॉन-न्यूमेरिक भाग काढून टाकते, ज्यामुळे ॲरेमधील आयटमच्या इंडेक्सशी अचूकपणे जुळणे सोपे होते.

जावास्क्रिप्ट हटवण्याच्या त्रुटींना प्रतिबंध करण्यावर अंतिम विचार

JavaScript हटवण्याच्या त्रुटी हाताळण्यामुळे कोड गुणवत्ता आणि वापरकर्ता अनुभव दोन्ही प्रभावीपणे सुधारतात. मॉड्युलर फंक्शन्स आणि इव्हेंट डेलिगेशन सारखी सोल्यूशन्स हे सुनिश्चित करण्यात मदत करू शकतात की सूची घटक सहजतेने आणि त्रुटींशिवाय हटवले जातात.

स्पष्ट स्कोपिंग लागू करून आणि लोकल स्टोरेज योग्यरित्या व्यवस्थापित करून, आम्ही डायनॅमिक टू-डू याद्या तयार करतो ज्या अखंडपणे अपडेट करतात. त्रुटी लवकर संबोधित करणे आणि मजबूत त्रुटी हाताळणी तंत्रे वापरणे देखील अनुप्रयोगास विश्वासार्ह आणि वापरकर्ता अनुकूल ठेवण्यास मदत करते. 😃

JavaScript त्रुटी हाताळणीसाठी संसाधने आणि संदर्भ
  1. हा लेख डायनॅमिक सूची घटकांसह JavaScript त्रुटी व्यवस्थापित करण्यासाठी सखोल उपायांचा संदर्भ देतो आणि कार्यक्रम हाताळणी. संबंधित उदाहरण आणि चाचणी संदर्भासाठी CodePen पहा: कोडपेन - टू-डू लिस्ट उदाहरण .
  2. JavaScript वरील मूलभूत माहितीसाठी स्थानिक स्टोरेज पद्धती आणि कार्यक्रम प्रतिनिधी तंत्र, MDN वेब डॉक्सला भेट द्या: MDN - लोकल स्टोरेज .
  3. ट्राय-कॅच ब्लॉक्ससह जटिल JavaScript त्रुटी हाताळण्यावरील अंतर्दृष्टी आणि कार्यक्षम DOM हाताळणी W3Schools मधून धोरणांचा संदर्भ दिला गेला: W3Schools - JavaScript त्रुटी .