<input type="checkbox" onclick="onClickHandler()" onchange="onChangeHandler()" />
भीतर onClickHandler
और / या onChangeHandler
, मैं यह कैसे निर्धारित कर सकता हूं कि चेकबॉक्स की नई स्थिति क्या है?
<input type="checkbox" onclick="onClickHandler()" onchange="onChangeHandler()" />
भीतर onClickHandler
और / या onChangeHandler
, मैं यह कैसे निर्धारित कर सकता हूं कि चेकबॉक्स की नई स्थिति क्या है?
जवाबों:
संक्षिप्त उत्तर:
click
ईवेंट का उपयोग करें , जो मूल्य अपडेट होने के बाद तक फायर नहीं करेगा, और जब आप चाहें तब आग:
<label><input type='checkbox' onclick='handleClick(this);'>Checkbox</label>
function handleClick(cb) {
display("Clicked, new value = " + cb.checked);
}
लंबा जवाब:
change
ईवेंट हैंडलर नहीं बुलाया जाता है जब तक checked
राज्य अद्यतन किया गया है ( लाइव उदाहरण | स्रोत ) है, लेकिन क्योंकि (टिम Büthe टिप्पणी में बताते हैं) आईई आग नहीं करता change
घटना जब तक चेकबॉक्स फोकस खो देता है, आप नहीं मिलता अधिसूचना लगातार। आईई के साथ इससे भी बदतर, अगर आप इसे अपडेट करने के लिए चेकबॉक्स (चेकबॉक्स के बजाय) के लिए एक लेबल पर क्लिक करते हैं, तो आप यह मान सकते हैं कि आपको पुराना मूल्य मिल रहा है (लेबल पर क्लिक करके IE के साथ प्रयास करें: लाइव उदाहरण | स्रोत )। ऐसा इसलिए है क्योंकि यदि चेकबॉक्स में फ़ोकस है, तो लेबल पर क्लिक करने से फ़ोकस उस पर से हट जाता है, change
पुराने मान के साथ घटना को निकालता है , और फिरclick
नया मान सेट करने और चेकबॉक्स पर वापस ध्यान केंद्रित करने के लिए होता है। बहुत ज्यादा उलझन।
लेकिन अगर आप click
इसके बजाय उपयोग करते हैं तो आप उस सभी अप्रियता से बच सकते हैं ।
मैंने DOM0 हैंडलर ( onxyz
विशेषताएँ) का उपयोग किया है, क्योंकि आपने जो इसके बारे में पूछा है, लेकिन रिकॉर्ड के लिए, मैं आमतौर पर कोडर्स (DOM2's addEventListener
, या attachEvent
IE के पुराने संस्करणों में) का उपयोग करने के बजाए कोड में हुकिंग करने की सलाह दूंगा onxyz
। यह आपको एक ही तत्व के लिए कई हैंडलर संलग्न करने देता है और आपको अपने सभी हैंडलर को वैश्विक कार्य करने से रोकता है।
इस उत्तर के एक पुराने संस्करण ने इस कोड का उपयोग किया है handleClick
:
function handleClick(cb) {
setTimeout(function() {
display("Clicked, new value = " + cb.checked);
}, 0);
}
ऐसा लगता है कि मूल्य को देखने से पहले क्लिक को पूरा करने की अनुमति दी गई थी। जहाँ तक मुझे पता है, ऐसा करने का कोई कारण नहीं है, और मुझे नहीं पता कि मैंने ऐसा क्यों किया। click
हैंडलर कहे जाने से पहले मान बदल दिया जाता है। वास्तव में, उस बारे में कल्पना बिल्कुल स्पष्ट है । संस्करण के बिना setTimeout
हर ब्राउज़र में पूरी तरह से अच्छी तरह से काम करता है जो मैंने कोशिश की है (यहां तक कि IE6)। मैं केवल यह मान सकता हूं कि मैं किसी अन्य प्लेटफ़ॉर्म के बारे में सोच रहा था जहां परिवर्तन घटना के बाद तक नहीं हुआ है। किसी भी स्थिति में, HTML चेकबॉक्स के साथ ऐसा करने का कोई कारण नहीं है।
tab
+ space
) के माध्यम से चेकबॉक्स को टॉगल करना भी onclick
हैंडलर को ट्रिगर करेगा (क्रोम 51 में सत्यापित है, कम से कम)।
React.js के लिए, आप इसे अधिक पठनीय कोड के साथ कर सकते हैं। आशा करता हूँ की ये काम करेगा।
handleCheckboxChange(e) {
console.log('value of checkbox : ', e.target.checked);
}
render() {
return <input type="checkbox" onChange={this.handleCheckboxChange.bind(this)} />
}
onchange
सही ढंग से काम करता है+IE9
। स्रोत