2012-06-12 11 views
5

से पहले मूल्य बदल दिया गया था, तो हमारे पास इनपुट type = "number" है और हमने onChange विधि सेट की है।मैन्युअल रूप से बदलते मान को चालू नहीं किया जाता है यदि प्रोग्राम प्रोग्रामेटिक

इनपुट का डिफ़ॉल्ट मान से 10

अब हम मूल्य मैन्युअल रूप से 0 करने के लिए फिर से बदलने 0.

फिर हम प्रोग्राम के मूल्य बदल कहने के लिए है।

onChange मैन्युअल रूप से किए गए परिवर्तन पर विधि को नहीं कहा जाता है। मुझे लगता है कि ऐसा इसलिए था क्योंकि जब हमने अपना मूल्य प्रोग्रामेटिक रूप से 10 तक बदल दिया था तो इस तरह से नियंत्रण सोचता है कि मान अभी भी 0.

ऐसा तब होता है जब मैं मैन्युअल रूप से मूल्य के मान को सेट करता हूं प्रोग्रामेटिक बदलाव से पहले था। यदि मैन्युअल परिवर्तन करने के लिए मैं किसी अन्य मूल्य का उपयोग करता हूं, तो onChange ईवेंट सही ढंग से ट्रिगर किया गया है।

+0

क्या आप एक उदाहरण प्रदान कर सकते हैं, जैसे कि [jsFiddle] (http://jsfiddle.net), जो इसे प्रदर्शित करता है? साथ ही, आप किस ब्राउजर का उपयोग कर रहे हैं और क्या आप निश्चित हैं [इस इनपुट प्रकार का समर्थन करते हैं] (http://caniuse.com/#feat=input-number)? –

+0

यह आईओएस सफारी पर जेएस है। दिलचस्प बात यह है कि समस्या तब होती है जब मैं मैन्युअल रूप से उस मूल्य के मान को बदलता हूं जो प्रोग्रामेटिक रूप से बदलने से पहले होता था। किसी भी अन्य मामले में इनपुट नंबर पूरी तरह से उनके आदान-प्रदान विधि को ट्रिगर करता है ... –

+0

एकमात्र चीज जो मुझे कुछ अच्छा परिणाम देती है, ऑन चेंज की बजाय ऑन इनपुट ईवेंट का उपयोग कर रही है .... लेकिन मुझे नहीं पता कि यह लाने जा रहा है या नहीं मुझे और समस्याएं –

उत्तर

4

प्रोग्राम रूप से एक फॉर्म नियंत्रण के मूल्य को बदलना अपने परिवर्तन हैंडलर को ट्रिगर नहीं करता है, संभवतः change ईवेंट को उपयोगकर्ता के मूल्य और नियंत्रण खोने के बाद खोने के बाद असाइन किया गया था। प्रोग्रामेटिक परिवर्तन उस अनुक्रम का पालन नहीं करते थे (प्रोग्रामिक रूप से फोकस और धुंध को उपयोगकर्ता क्रियाओं की नकल करने में मदद नहीं मिली, हालांकि तत्व पर एक प्रोग्रामेटिक चेंज इवेंट भेजा जा सकता था)।

HTML5 एक नई input घटना आग जब भी एक इनपुट उपयोगकर्ता इनपुट प्राप्त करता है कि शुरू की:

<input id="i0" oninput="alert(this.value);" value=""> 

आपको लगता है कि इस्तेमाल कर सकते हैं onchange के बजाय, लेकिन यह प्रत्येक कुंजी दबाने पर आग और भी अगर पाठ चिपकाया या करने के लिए घसीटा जाता है इनपुट।

नोट हालांकि यह है कि कोई ब्राउज़र पूरी तरह से एचटीएमएल 5 का समर्थन करता है (और शायद कभी नहीं होगा, यह एक अस्थिर लक्ष्य है के बाद से) है, तो आप इनपुट घटना का समर्थन नहीं किया जाना चाहिए वापस तंत्र सुविधा परीक्षण और गिरावट प्रदान करने के लिए की आवश्यकता होगी।

+0

मुझे लगता है कि 'इनपुट' ईवेंट अभी भी प्रोग्रामेटिक इनपुट परिवर्तन पर ट्रिगर नहीं करेगा, मुझे लगता है कि यह 'कीप'' कीडाउन' घटनाओं का उपयोग किए बिना चल रहे टेक्स्ट फ़ील्ड इनपुट डिटेक्शन को ट्रैक करने की आवश्यकता के समाधान के रूप में है। http://www.w3schools.com/html5/html5_ref_eventattributes.asp –

+0

हां, आप सही हैं। W3Schools एक बहुत ही साधारण साइट है, लेकिन वे दावा करते हैं कि "ऑनसेट एचटीएमएल 5 में समर्थित नहीं है"। काफी विपरीत, यह एक ऐसा है जो उपयोगकर्ता एजेंसियों को समर्थन देना चाहिए: [HTML5 ऑनसेट] (http://dev.w3.org/html5/spec-author-view/webappapis.html#event-handlers-on-elements- दस्तावेज़-ऑब्जेक्ट्स-एंड-विंडो-ऑब्जेक्ट्स) – RobG

+0

वाह, मैं वास्तव में इस सूची की तरह कुछ ढूंढ रहा था। धन्यवाद!! मुझे पता नहीं है लेकिन यह नेविगेट करने और W3 spec दस्तावेज़ों में कुछ खोजने के लिए काफी कठिन लगता है ... –

0

इनपुट को टर्नग्रेड होने के लिए फ़ोकस की आवश्यकता है। यह वास्तव में एक अच्छी बात है यदि प्रोग्रामेटिक रूप से इनपुट मान सेट करना नतीजे ईवेंट को ट्रिगर नहीं करता है। यह इनपुट और कोड के बीच से एक परिपत्र सेटिंग बनाई होगी।

संबंधित मुद्दे