2010-10-04 22 views
6

में केवल इनपुट बॉक्स बग पढ़ें मुझे एक अजीब बग मिला है, ठीक है, एमएसआईई करता है।इंटरनेट एक्सप्लोरर

लगता है यह सभी प्रमुख MSIE संस्करणों पर विफल हो रहा है: (!) 6, 7, 8 और 9

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-gb" lang="en-gb" ><head><title>test</title> 

    <script type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.min.js"></script> 
    <script type="text/javascript"> 
    jQuery(document).ready(function(){ 
    var test=jQuery('#in'); 
    test.focus(function(){ 
    if(test.val()=='empty')test.val(''); 
    test.attr('readonly',false); 
    }); 
    test.blur(function(){ 
    if(test.val()=='')test.val('empty'); 
    test.attr('readonly',true); 
    }); 
    }); 
    </script> 

</head><body> 

    <input type="text" value="empty" readonly="readonly" id="in"/> 

</body></html> 

मुझे कैसे इस प्रणाली काम करती है और क्या गलत हो रहा है समझाता हूँ।

जब उपयोगकर्ता इनपुट बॉक्स पर क्लिक करता है (फ़ोकस करता है), इनपुट बॉक्स को संपादन योग्य (यानी, केवल पढ़ने के लिए ध्वज) होना चाहिए। फिर, जब वह इनपुट बॉक्स छोड़ देता है (यानी, धुंधला घटना) कुछ प्रसंस्करण किया जाता है (कोड में नहीं दिखाया जाता है) और इनपुट बॉक्स को केवल पढ़ा जाता है।

यह अधिकांश ब्राउज़रों (फ़ायरफ़ॉक्स, ओपेरा, वेबकिट-आधारित) में एक आकर्षण की तरह काम करता है, लेकिन आईई (9 बीटा सहित) का कोई संस्करण नहीं है। समस्या यह है कि IE में, उपयोगकर्ता को इनपुट बॉक्स को दो बार क्लिक करना होगा।

इस बिंदु पर, आप पूछ सकते हैं कि इनपुटबॉक्स पहली बार पढ़ा गया है? नहीं। मैंने इसका परीक्षण किया, जावास्क्रिप्ट रिपोर्ट करता है कि यह संपादन योग्य है।

आसान फ़िक्स, बस इनपुट बॉक्स पर क्लिक करें (उपयोगकर्ता के डबल क्लिक व्यवहार को अनुकरण करने के लिए), नहीं? नहीं, .click() और .focus() दोनों विफल रहे। कोई विचार क्यों नहीं।

संपादित करें: पता है कि कर्सर टेक्स्ट बॉक्स में कम से कम स्पष्ट रूप से दिखाई देता है।

महत्वपूर्ण: लोग, कृपया उत्तर देने से पहले कोड को कम से कम प्रयास करें!

+6

क्यों यह केवल पढ़ने के लिए बिल्कुल बनाने के लिए, एक क्लिक यह संपादन योग्य बनाता है तो क्या होगा? –

+1

उस पर शायद ही कोई फिक्स या रचनात्मक उत्तर है। – Christian

+0

यही कारण है कि यह एक टिप्पणी थी और जवाब नहीं था। – meagar

उत्तर

8

मैं इसे एक बग है नहीं कहेंगे। यदि आप मान बदलते हैं, तो आप वर्तमान टेक्स्ट रेंज को भी हटा देते हैं।

test.select() आज़माएं, इसे कर्सर को इनपुट में वापस देना चाहिए।

test.focus() 

परिणामस्वरूप एक लूप होगा जो "पर्याप्त स्मृति नहीं" आतंक में समाप्त होगा।

+0

हाय वहाँ! मैं इसे बाहर निकालने की कोशिश करूंगा। हालांकि, मैंने सफलतापूर्वक उपयोग किया। फ़ोकस() सफलतापूर्वक, जैसा कि, मुझे ऐसी त्रुटि नहीं मिली। लेकिन जैसा कि मैंने कहा, यह काम नहीं किया। ओह, यह महत्वपूर्ण है, पता है कि कर्सर वास्तव में कम से कम इनपुट बॉक्स के अंदर इनपुट बॉक्स के अंदर है। (संपादित प्रश्न) – Christian

+0

हम्म, यह ठीक काम करता है! – Christian

+0

'test.select()' समस्या का समाधान धन्यवाद! लेकिन 'test.focus()' नहीं था। – eloone

2

मुझे विश्वास है कि readonlyreadOnly होना चाहिए। अजीब लगता है कि आप इस संपत्ति को टॉगल करेंगे। आप भी इसे

jQuery("#foo").removeAttr("readOnly"); //.removeAttr("readonly"); 
+0

उहम? यह "पठनीय" है एमएसआईई इसे "केवल पढ़ने के लिए" बदलता प्रतीत होता है, लेकिन यह भी काम करता है। इसके अलावा, यह मेरी समस्या से पहले है। – Christian

1

कोशिश इस Ive सिर्फ इतना है कि कोशिश की दूर करने की कोशिश कर सकते हैं और यह काम करता है:

<input type="text" value="empty" id="in" readonly/> 
संबंधित मुद्दे