चेकबॉक्स इनपुट के लिए एक क्लिक ईवेंट पर बाध्यकारी होने पर, मेरे ईवेंट हैंडलर के समय तक चेकबॉक्स पहले से ही टॉगल किया जाता है और, और अजीब बात यह है कि अगर मैं event.preventDefault() निर्दिष्ट करता हूं तो मेरे ईवेंट हैंडलर चलाने के बाद टॉगल उलट दिया जाता है;क्या यह चेकबॉक्स इनपुट, या त्रुटिपूर्ण कोड पर डिफ़ॉल्ट क्लिक ईवेंट की मूल गलतफहमी है?
<input id="foo" type="checkbox"/>
function clicked(evt) {
alert(document.getElementById('foo').checked);
evt.preventDefault();
}
document.getElementById('foo').addEventListener('click',clicked);
[क्रोम और फ़ायरफ़ॉक्स में परीक्षण]
चेतावनी "सही" (या चेकबॉक्स पूर्व क्लिक के विपरीत राज्य) जवाब देंगे। अलर्ट को खारिज करने के बाद, चेकबॉक्स वापस टॉगल करता है।
तो, मुझे लगता है कि सवाल कर रहे हैं,
वास्तविक डिफ़ॉल्ट घटना क्या रोका जा रहा है? क्या मैं यह मानने में गलत हूं कि राज्य के बदलाव से पहले मेरा इवेंट हैंडलर चलाना चाहिए? क्या चेकबॉक्स क्लिक को वैध रूप से अवरुद्ध करने का कोई तरीका है?
और दुनिया में क्यों रोकथाम है क्योंकि चेकबॉक्स को फिर से टॉगल कर रहा है?
अजीब चीज यह भी है कि यदि आप 'क्लिक किए गए' के अंदर दो लाइनों को स्वैप करते हैं, तो आपको वही परिणाम मिलता है। तो यह * चेतावनी के बाद * तक नहीं है कि यह वास्तव में डिफ़ॉल्ट को रोकता है। http://jsfiddle.net/pimvdb/NHwXs/3/ – pimvdb
@pimvdb - ऐसा इसलिए है क्योंकि 'evt.prevntDefault() 'ध्वज को टॉगल करता है और किसी ईवेंट हैंडलर के भीतर से कहीं भी कहा जा सकता है। इसे कॉल के अंत में दिखाई नहीं देना है। यह नियंत्रित करता है कि डिफ़ॉल्ट हैंडलर * नए बाउंड एक खत्म होने के बाद * होता है या नहीं। –
इसके बजाय आप 'mousedown' को रद्द करके चेकिंग को रोक सकते हैं। – Hemlock