इस नमूना कोड पर विचार करें:क्या आप इंटरनेट एक्सप्लोरर पर इन रेडियो बटन घटनाओं को जाल कर सकते हैं?
<div class="containter" id="ControlGroupDiv">
<input onbeforeupdate="alert('bingo 0'); return false;" onclick="alert('click 0');return false;" id="Radio1" type="radio" value="0" name="test" checked="checked" />
<input onbeforeupdate="alert('bingo 1'); return false;" onclick="alert('click 1');return false;" id="Radio2" type="radio" value="1" name="test" />
<input onbeforeupdate="alert('bingo 2'); return false;" onclick="alert('click 2');return false;" id="Radio3" type="radio" value="2" name="test" />
<input onbeforeupdate="alert('bingo 3'); return false;" onclick="alert('click 3');return false;" id="Radio4" type="radio" value="3" name="test" />
<input onbeforeupdate="alert('bingo 4'); return false;" onclick="alert('click 4');return false;" id="Radio5" type="radio" value="4" name="test" />
<input onbeforeupdate="alert('bingo 5'); return false;" onclick="alert('click 5');return false;" id="Radio6" type="radio" value="5" name="test" />
</div>
Firefox 2 और 3 पर, परिवर्तित करने से यह मूल्य से बचाता है एक रेडियो बटन को क्लिक घटना पर return false
डालने और समूह में अन्य सभी रेडियो बटन। यह प्रभावी रूप से इसे अक्षम किए बिना और इसे भूरे रंग के बिना पढ़ता है।
इंटरनेट एक्सप्लोरर पर, यदि कोई अन्य रेडियो बटन चेक किया गया है और आप समूह में किसी एक पर क्लिक करते हैं, तो क्लिक किए गए ईवेंट पर क्लिक करने से पहले चेक किए गए एक को साफ़ कर दिया जाता है। हालांकि, क्लिक किए गए ईवेंट पर 'वापसी झूठी' के कारण आपने जिस पर क्लिक किया है उसे चुना नहीं जाता है।
According to MSDN, onbeforeupdate
घटना क्लिक घटना से पहले नियंत्रण समूह में सभी नियंत्रणों पर आग लगती है और मुझे लगता है कि अन्य रेडियो बटन को साफ़ किया जा रहा था। लेकिन अगर आप ऊपर दिए गए कोड को आजमाते हैं, तो onbeforeupdate
ईवेंट से कभी भी कोई अलर्ट नहीं दिखाया जाता है - आपको बस इवेंट अलर्ट क्लिक करें। जाहिर है कि घटना कभी नहीं निकाल दी जा रही है या इसे फंसाने का कोई तरीका नहीं है।
क्या कोई ऐसी घटना है जिसे आप जाल कर सकते हैं जिससे आप समूह में अन्य रेडियो बटन को साफ़ करने से रोक सकते हैं?
ध्यान दें कि यह एक सरलीकृत उदाहरण है, हम वास्तव में ईवेंट हैंडलर सेट करने और इसे संभालने के लिए jQuery का उपयोग कर रहे हैं।
अद्यतन:
आप रेडियो बटन से एक के लिए इस घटना को जोड़ते हैं:
onmousedown="alert('omd'); return false;"
चेतावनी बॉक्स पॉप अप होता है, आप इसे बंद करो, और क्लिक करें घटना कभी नहीं आग। तो हमने सोचा कि हमने यह पता लगाया था, लेकिन नहीं, यह इतना आसान नहीं हो सकता था। यदि आप अलर्ट हटाते हैं और इसे बदलते हैं:
onmousedown="return false;"
यह काम नहीं करता है। अन्य रेडियो बटन साफ़ हो जाते हैं और आपके द्वारा आग पर क्लिक किए गए बटन पर क्लिक ईवेंट। onbeforeupdate
अभी भी कभी नहीं आग लगती है।
हमने सोचा कि यह समय किया जा सकता है (कि हमेशा एक सिद्धांत है, भले ही यह शायद ही कभी सच है), इसलिए मैं इस कोशिश की:
onmousedown="for (i=0; i<100000; i++) {;}; return false;"
आप क्लिक करें, यह थोड़ी देर के लिए रुक जाता है, तो अन्य रेडियो बटन साफ करता है और फिर क्लिक घटना आग लगती है। Aaargh!
अद्यतन:
इंटरनेट एक्सप्लोरर बेकार है। जब तक कि कोई अच्छा विचार न आए, हम इस दृष्टिकोण को छोड़कर चेकबॉक्स jQuery एक्सटेंशन के साथ जा रहे हैं जो हम चाहते हैं जो करता है, लेकिन पृष्ठ पर भारी क्लाइंट-साइड स्क्रिप्ट बोझ डालता है और HTML के अधिक रिकोडिंग की आवश्यकता होती है एएसपी.Net सर्वर नियंत्रण प्रतिपादन और मास्टर पेज नाम मैंगलिंग।
एकमात्र चीज जिसे हम करने का प्रयास कर रहे हैं, ग्राहक अनुरोध द्वारा, ग्रे रेडियो अक्षम रेडियो बटन और चेकबॉक्स नहीं है। यह सभी ब्राउज़रों पर सभी चेकबॉक्सों और आईई (बेशक) को छोड़कर सबकुछ पर सभी रेडियो बटनों के लिए एक त्वरित और आसान समाधान था। – CMPalmer
हेहे, मुझे ग्राहक अनुरोध पसंद है! - मुझे वह चीज़ चाहिए जो मुझे क्लिक करने के लिए क्लिक करने की अनुमति नहीं है जिसे मैं क्लिक कर सकता हूं। - कुछ समझ नहीं आया! ;-) – scunliffe
एह, इस मामले में मैं बहुत ज्यादा बहस नहीं कर सकता। ग्रे किए गए चेक किए गए बक्से पढ़ने के लिए कठिन हैं और फ़ायरफ़ॉक्स/आईई संबंधित लेबलों को अलग-अलग तरीकों से प्रस्तुत करते हैं (जिसमें भूरे रंग के पाठ को छेड़छाड़ किए गए "3 डी" में बदलने के आईई के वास्तव में कष्टप्रद तरीके शामिल हैं जो सफेद लेकिन कुछ भी के खिलाफ बकवास की तरह दिखता है। – CMPalmer