2010-11-23 13 views
6

मुझे आईई 8 (और केवल आईई) के साथ एक निश्चित समस्या है, जब मैं इनपुट फ़ील्ड पर ध्यान केंद्रित करता हूं जिसमें कर्सर उस क्षेत्र की शुरुआत में चलता है। मैं कर्सर को अंत में सेट करने की कोशिश कर रहा हूं। मैं आसपास googled और निम्नलिखित समाधान मिल गया है:कर्सर एक टेक्स्ट फ़ील्ड की शुरुआत में चलता है

function setSelectionRange(input, selectionStart, selectionEnd) { 
    input = document.getElementsByTagName("input")[0]; 
    if (input.createTextRange) { 
     var range = input.createTextRange(); 
     range.collapse(true); 
     range.moveEnd('character', selectionEnd); 
     range.moveStart('character', selectionStart); 
     range.select(); 
    } 
} 

"इनपुट" यहाँ बस एक इनपुट क्षेत्र है जो एक वर्ग (var inputElement = this.input;) में है। समस्या यह है कि "setSelectionRange" और "createTextRange" दोनों। क्या मुझसे कुछ गलत हो रही है? क्या TextTreRange केवल TextArea के लिए परिभाषित किया गया है?

@ एडिट: अच्छी तरह से ऐसा लगता है कि मैं दस्तावेज़ में इनपुट बदलने के बाद "दो ऑब्जेक्ट्स" जेएस इनपुट और एक jQuery इनपुट जैसे कुछ का उपयोग कर रहा था .getElementsByTagName ("input") [0]; मैं "createTextRange" शाखा में जा सकता हूं लेकिन यह अभी भी कर्सर की स्थिति को नहीं बदलता है।

@ संपादन 2: मैंने कोड थोड़ा सा बदल दिया, अब मुझे दस्तावेज़ से इनपुट मिल रहा है और यह शाखा में प्रवेश करता है। लेकिन तब ब्राउज़र मुझे पता चलता है:

Unexpected call to method or property access. 

इस लाइन var range = input.createTextRange();

@ Edit3 पर: जेम्स 'सवाल का जवाब करने के लिए। मेरे पास एक वर्ग है और उस वर्ग में, पूरी चीज एक जेएसपी से जुड़ी है जिसमें इनपुट है। इस वर्ग में मैं क्षेत्र है जो इनपुट के साथ जुड़ा हुआ है के लिए ध्यान देने के हैंडलर सेट jsp inputElement.focus(onInputFocus) फार्म तो मैं कुछ इस तरह है:

function onInputFocus() { 
    isFocused = true; 
    valueDivElement.hide(); 
    labelElement.html(labelFocus); 
    if (currentData.selectedEntityCode) { 
     inputElement.val(currentData.selectedEntityCode); 
     inputElement.attr('title', currentData.selectedEntityCode); 
    } else { 

    } 

    var input = document.getElementsByTagName("input")[0]; 
    input.value = input.value; 
} 

पूरी कक्षा स्पष्ट रूप से बहुत बड़ा है और यह मेरा कोड, लेकिन मैं नहीं है मुझे लगता है कि यह आखिरी चीज है जिसे निष्पादित किया जा रहा है।

+0

यह फ़ंक्शन '<इनपुट प्रकार =" टेक्स्ट ">' तत्वों के लिए ठीक काम करेगा। क्या आप निश्चित हैं कि आप जिस तत्व को पार कर रहे हैं वह एक डोम इनपुट तत्व है? –

+0

हां, मैंने इसे दोबारा जांच लिया। समस्या अब "var range = input.createTextRange();" के साथ है पता नहीं क्यों। यह उस शाखा में प्रवेश करता है लेकिन यह उस रेखा पर विफल रहता है और बाकी को निष्पादित नहीं किया जाता है। –

+0

यदि यह वहां विफल रहता है, तो त्रुटि संदेश क्या है? और आप फोकस कहां सेट करते हैं? –

उत्तर

4

क्षमा करें क्या मुझे यहां कुछ याद आ रहा है? क्या आप कर्सर को अंत में सेट करने की कोशिश कर रहे हैं, या सीमा को हाइलाइट करते हैं? आप सवाल पूर्व को इंगित करना प्रतीत होता है, लेकिन समाधान उत्तरार्द्ध प्राप्त करता है।

यदि आप कर्सर को अंत में सेट करना चाहते हैं, तो उपरोक्त फ़ंक्शन आवश्यक नहीं है। एक बार फोकस निर्धारित किया गया है, बस निम्न कार्य करें:

input.value = input.value; //assumes input is a DOM element. 

इस JSFiddle देखें: http://jsfiddle.net/7vdv6/

संपादित करें:

जहां तक ​​मैंने देखा जा सकता है वहाँ सामान की एक पूरी गुच्छा हो सकता है वह यह है कि अपने इनपुट से दूर फोकस करना:

isFocused = true; 
valueDivElement.hide(); 
labelElement.html(labelFocus); 
if (currentData.selectedEntityCode) { 
    inputElement.val(currentData.selectedEntityCode); 
    inputElement.attr('title', currentData.selectedEntityCode); 
} else { 

} 

क्या होता है यदि आप अपने बीच फोकस() जोड़ते हैं पिछली दो पंक्तियां:

var input = document.getElementsByTagName("input")[0]; 
input.focus(); 
input.value = input.value; 

आपको jQuery और मानक जावास्क्रिप्ट का काफी गन्दा मिश्रण भी मिला है। उदाहरण के लिए, आप document.getElementsByTagName("input")[0] का उपयोग क्यों कर रहे हैं जब आप $("input:first") का उपयोग कर सकते हैं ??

+0

हां मैं बस कर्सर को अंत में सेट करने की कोशिश कर रहा हूं। मैंने पहले से ही "input.value = input.value;" कोशिश की है लेकिन किसी भी तरह से यह बुरा नहीं था, कर्सर अभी भी शुरुआत में स्वचालित रूप से चला जाता है। –

+0

आप इसे कब कॉल कर रहे हैं? अर्थात। क्या यह आखिरी चीजों में से एक है जो आप कर रहे हैं? क्या आप हमें इसके आसपास का कोड दिखा सकते हैं? –

+0

कुछ और कोड जोड़ा –

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