यह सीधे आपके प्रश्न का उत्तर नहीं दे सकता है, लेकिन इस समस्या को सरल डिजाइन स्तर समायोजन द्वारा हल किया जा सकता है। मैं समझता हूं कि यह सभी उपयोग के मामलों के लिए 100% लागू नहीं हो सकता है, लेकिन मैं दृढ़ता से आपसे आग्रह करता हूं कि आप अपने आवेदन के उपयोगकर्ता प्रवाह पर फिर से विचार करें और यदि निम्नलिखित डिजाइन सुझाव को लागू किया जा सकता है।
मैं के लिए विकल्प की हैकिंग से कुछ सरल करने के लिए फैसला किया है onChange()अन्य घटनाओं है कि वास्तव में इस उद्देश्य के लिए नहीं किया गया था का उपयोग कर ( blur, clickआदि)
जिस तरह से मैंने इसे हल किया:
बस प्लेसहोल्डर ऑप्शन टैग को प्री-पेंड करें जैसे चयन करें जिसका कोई मूल्य नहीं है।
इसलिए, केवल निम्न संरचना का उपयोग करने के बजाय, जिसमें हैक-वाई विकल्प की आवश्यकता होती है:
<select>
<option>A</option>
<option>B</option>
<option>C</option>
</select>
इसका उपयोग करने पर विचार करें:
<select>
<option selected="selected">Select...</option>
<option>A</option>
<option>B</option>
<option>C</option>
</select>
तो, इस तरह, आपका कोड बहुत अधिक सरलीकृत है और यह onChangeअपेक्षा के अनुरूप काम करेगा, हर बार जब उपयोगकर्ता डिफ़ॉल्ट मान के अलावा किसी अन्य चीज का चयन करने का निर्णय लेता है। आप disabledपहले विकल्प में भी विशेषता जोड़ सकते हैं यदि आप उन्हें फिर से चुनना नहीं चाहते हैं और उन्हें विकल्पों में से कुछ चुनने के लिए मजबूर कर सकते हैं, तो इस तरह से onChange()आग लग सकती है।
इस उत्तर के समय, मैं एक जटिल Vue एप्लिकेशन लिख रहा हूं और मैंने पाया कि इस डिज़ाइन की पसंद ने मेरे कोड को बहुत सरल कर दिया है। इस समस्या का समाधान करने से पहले मैंने इस समस्या पर घंटों बिताए और मुझे अपने कोड को दोबारा लिखना नहीं पड़ा। हालाँकि, अगर मैं हैकी विकल्पों के साथ गया था, तो मुझे एज मामलों के लिए फायरिंग को रोकने की आवश्यकता होगी, अजाक्स अनुरोधों की दोहरी गोलीबारी को रोकने के लिए, आदि। यह एक अच्छा बोनस के रूप में डिफ़ॉल्ट ब्राउज़र व्यवहार को गड़बड़ नहीं करता है (मोबाइल पर परीक्षण किया गया) साथ ही ब्राउज़र)।
कभी-कभी, आपको बस एक कदम वापस लेने की जरूरत है और सबसे सरल समाधान के लिए बड़ी तस्वीर के बारे में सोचना चाहिए।