2012-05-08 14 views
6

Im का उपयोग करता है तो Knockout.js और ASP.NET का उपयोग करते समय अद्यतन नहीं कर रहा है। उपयोगकर्ता आइटम का चयन करने के लिए माउस का उपयोग करता हैKnockout.js value जब उपयोगकर्ता कीबोर्ड

<div class="InputField"> 
    Fixed/Floating 
    <div class="FieldContainer"> 
     <select data-bind="options: $root.FixedLoanOptions, selectedOptions: IsFixed, valueUpdate: 'change'" ></select> 
    </div> 
</div> 

हैं, JSON अद्यतन जानकारी के साथ सर्वर से वापस आता है: मेरी एचटीएमएल इस प्रकार है। लेकिन यदि उपयोगकर्ता चुनिंदा नियंत्रण पर टैब पर "टैब" का उपयोग करता है, तो एक आइटम का चयन करें, और टैब बंद करें, फिर भी चयनित आइटम UI पर प्रदर्शित होता है, फिर भी JSON इस नियंत्रण के लिए रिक्त मान के साथ वापस आ जाता है।

ऐसा लगता है कि यदि उपयोगकर्ता केवल कुंजीबॉर्ड का उपयोग करता है तो नॉकआउट व्यू मॉडल अपडेट नहीं होता है, ऐसा लगता है कि उपयोगकर्ता कुछ समय में ब्राउज़र में होता है जब उपयोगकर्ता माउस का उपयोग करता है।

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

मैंने इसे IE9 और फ़ायरफ़ॉक्स दोनों में आजमाया है और मुझे दोनों में एक ही समस्या है।

उत्तर

2

आपका शेष कोड कैसा दिखता है? AJAX कॉल कैसे किया जा रहा है?

कीबोर्ड के साथ एक का चयन को संशोधित करने की यह उदाहरण IE और Firefox पर मेरे लिए ठीक काम करता है:

http://jsfiddle.net/mikebridge/yYS7c/2/

0

जब आप नॉकआउटज मॉडल को धुंधला करने के लिए अपडेट करते हैं तो आप ईवेंट को बदल सकते हैं जो अधिक ट्रिगर होता है।

<div class="InputField"> 
    Fixed/Floating 
    <div class="FieldContainer"> 
     <select data-bind="valueUpdate: 'blur', options: $root.FixedLoanOptions, selectedOptions: IsFixed" ></select> 
    </div> 
</div> 
+0

क्षमा करें, इस समस्या का समाधान नहीं है। मॉडल डेटा तब भी बदलता है जब मैं नियंत्रण पर क्लिक करता हूं, न कि जब मैं कीबोर्ड का उपयोग करता हूं। – 333Mhz

0

आप Live example नॉकआउट अद्यतन मॉडल पर देख सकते हैं केवल जब चुनिंदा विकल्प चुना जाता है:

  • माउस
  • कीबोर्ड तीर बटन द्वारा चयन किए गए एंटर बटन दबाएं।
0

मूल्य को बाध्य करना 'कीपअप' के लिए अद्यतन मेरे लिए चाल है। माउस के साथ किए गए परिवर्तनों को प्रभावित नहीं करता है, इसलिए अब तक अच्छा लग रहा है।

तो कुछ इस तरह काम करना चाहिए:

<div class="InputField"> 
    Fixed/Floating 
    <div class="FieldContainer"> 
     <select data-bind="valueUpdate: 'keyup', options: $root.FixedLoanOptions, selectedOptions: IsFixed" ></select> 
    </div> 
</div>