2011-07-06 11 views
20

पर फ़ोकस सेट करें वर्तमान में मुझे extjs textfield पर फ़ोकस सेट करने में समस्या है। फॉर्म शो के दौरान, मैं फोकस को फर्स्ट नेम टेक्स्ट बॉक्स पर सेट करना चाहता हूं और मैं फंक्शन फोकस() में बिल्ड का उपयोग करने की कोशिश करता हूं लेकिन फिर भी इसे काम नहीं कर सकता। मुझे आपका सुझाव देखने में खुशी है।Extjs textfield

var simple = new Ext.FormPanel({ 

    labelWidth: 75, 
    url:'save-form.php', 
    frame:true, 
    title: 'Simple Form', 
    bodyStyle:'padding:5px 5px 0', 
    width: 350, 
    defaults: {width: 230}, 
    defaultType: 'textfield', 
    items: [{ 
      fieldLabel: 'First Name', 
      name: 'first', 
      id: 'first_name', 
      allowBlank:false 
     },{ 
      fieldLabel: 'Last Name', 
      name: 'last' 
     },{ 
      fieldLabel: 'Company', 
      name: 'company' 
     }, { 
      fieldLabel: 'Email', 
      name: 'email', 
      vtype:'email' 
     }, new Ext.form.TimeField({ 
      fieldLabel: 'Time', 
      name: 'time', 
      minValue: '8:00am', 
      maxValue: '6:00pm' 
     }) 
    ], 

    buttons: [{ 
     text: 'Save' 
    },{ 
     text: 'Cancel' 
    }] 
}); 

simple.render(document.body); 
+1

कोड कहां केंद्रित करने का प्रयास करता है? – czarchaic

+0

मैं इसे एक्स्टजेस 4.2 में देरी के साथ भी काम नहीं कर सका ..मुझे लगता है कि कुछ कॉलबैक में इसे करने की ज़रूरत है, लेकिन मुझे यह पता नहीं लगा सकता कि कौन सा है। मैंने दृश्य पर 'रेंडरर' ईवेंट श्रोता की कोशिश की है, और यह भी काम नहीं करता है। – MacGyver

+0

यह भी देखें [केवल बनाई गई विंडो में टेक्स्ट इनपुट के लिए फोकस सेट करें] (https://stackoverflow.com/questions/11092833/set-focus-for-text-input-in-just-created-window) – Vadzim

उत्तर

18

कभी-कभी यह ध्यान केंद्रित करते समय थोड़ा विलंब जोड़ने में मदद करता है। ऐसा इसलिए है क्योंकि कुछ ब्राउज़रों (निश्चित रूप से फ़ायरफ़ॉक्स 3.6) को फॉर्म तत्वों को प्रस्तुत करने के लिए थोड़ा अतिरिक्त समय चाहिए।

ध्यान दें कि ExtJS के focus() विधि defer एक तर्क के रूप में स्वीकार करता है, ताकि कोशिश:

Ext.getCmp('first_name').focus(false, 200); 
+2

आपके उत्तर के लिए धन्यवाद लेकिन यह अभी तक काम नहीं है। ऐसा करने का एक और तरीका हो सकता है। वर्तमान में मैं इसे ब्राउज़र फ़ायरफ़ॉक्स 5.0 पर चला रहा हूं। –

8

आप अपने पाठ फ़ील्ड के लिए घटना "afterrender" का उपयोग करना चाहिए आप के बाद प्रपत्र प्रदान की गई है फोकस सेट करना चाहते हैं।

{ 
     fieldLabel: 'First Name', 
     name: 'first', 
     id: 'first_name', 
     allowBlank: false, 
     listeners: { 
      afterrender: function(field) { 
      field.focus(); 
      } 
     } 
    } 
+0

आपके उत्तर के लिए धन्यवाद कोई भी काम नहीं करेगा। –

+0

Ext.onReady के अंदर simple.render (document.body) लपेटें, तो आपको देरी – Tanel

+0

का उपयोग करने की आवश्यकता नहीं है यदि आप कॉन्फ़िगरेशन - allowBlank का उपयोग करते हैं: झूठी, इससे कुछ सत्यापन समस्याएं हो सकती हैं, जिस स्थिति में आपको झूठी सेट करने की आवश्यकता है पैरामीटर और मामूली देरी भी चोट नहीं पहुंची, उदाहरण के लिए field.focus (false, 1000) –

12

मैं बहुत सी बातें की कोशिश की है और यह करने के लिए एक रास्ता मिल गया पर Pumbaa80's answer और Tanel's answer आधार पर।

hasfocus:true, 

नीचे समारोह और का उपयोग करें::

Ext.getCmp('first_name').focus(false, 200); 

{ 
    id: 'fist_name', 
    xtype: 'textfield', 
    hasfocus:true, 
} 
+0

अगर हम 'फोकस') में तर्क को 'सत्य' के रूप में भी रखते हैं, तो यह अभी भी काम करता है? क्या आप कृपया इस व्यवहार को समझा सकते हैं .. –

+0

यदि यह समाधान काम करता है, तो कृपया इसे उत्तर के रूप में चिह्नित करें। – Athafoud

4

प्रयास करें: यहाँ कोड है कोड का?

या, this.callParent(arguments); के बाद इस लाइन Ext.getCmp('comp_id').focus('', 10);

4

क्यों नहीं बस के बजाय ज्यादा लाइनों को जोड़ने की defaultFocus : '#first_name' जोड़ने निम्नलिखित संपत्ति जोड़ने के लिए

{ 
    fieldLabel: 'First Name', 
    name: 'first', 
    id: 'first_name', 
    allowBlank: false, 
    listeners: { 
     afterrender: function(field) { 
     field.focus(false, 1000); 
     } 
    } 
} 
+1

संपत्ति डिफ़ॉल्ट फ़ोकस केवल विंडोज़ के लिए उपलब्ध प्रतीत होता है। अगर मैं गलत हूं कृपया मुझे सही। – David

+1

डिफ़ॉल्ट फोकस संपत्ति पूरी तरह से काम करना चाहिए। –

3

मैं आज कि इस मुद्दे के साथ संघर्ष कर रहा है जोड़ने के लिए, और मुझे लगता है मैं समाधान मिल गया लगता है। show() विधि प्रपत्र पैनल पर विधि को कॉल करने के बाद चाल focus() विधि का उपयोग कर रही है। यही कारण है, show घटना के लिए एक श्रोता जोड़ने:

Ext.define('My.form.panel', { 
    extend: 'Ext.form.Panel', 
    initComponent: function() { 
     this.on({ 
      show: function(formPanel, options) { 
       formPanel.down('selector-to-component').focus(true, 10); 
      } 
    }); 
    } 
}); 
+0

"शो" घटना कुंजी थी! बहुत बहुत धन्यवाद!!! –

-1
UIManager.SetFocusTo = function (row, column) { 
    var grd = Ext.getCmp('gridgrn'); 
    grd.editingPlugin.startEditByPosition({ 'column': column, 'row': row }); 

} 
+1

कृपया कुछ और विवरण दें। आपका कोड क्या करता है? यह ploblem कैसे हल करता है? – Athafoud

2

मैं भी (इंटरनेट एक्सप्लोरर में एक टेक्स्ट बॉक्स पर ध्यान केंद्रित करने उपरोक्त सुझावों के रूप में हो रही है के साथ संघर्ष कर दिया है क्रोम और फ़ायरफ़ॉक्स में ठीक काम कर रहे हैं)। इस पृष्ठ पर ऊपर सुझाए गए समाधानों का प्रयास किया लेकिन उनमें से कोई भी आईई में काम नहीं किया। इतने सारे शोध के बाद मुझे कामकाज मिला जो मेरे लिए काम करता था, मुझे उम्मीद है कि यह दूसरों के लिए सहायक भी होगा:

focus(true) का उपयोग करें या यदि आप इसे देरी करना चाहते हैं तो focus(true, 200) का उपयोग करें। उपरोक्त सवाल के रेफरी में कोड होगा:

{ 
     fieldLabel: 'First Name', 
     name: 'first', 
     id: 'first_name', 
     allowBlank: false, 
     listeners: { 
      afterrender: function(field) { 
      field.focus(true); 
      } 
     } 
    } 
0

मेरे प्रपत्र एक खिड़की के अंदर था और पाठ फ़ील्ड ध्यान केंद्रित नहीं होगा जब तक मैं खिड़की पहले ध्यान केंद्रित किया।

   listeners: { 
        afterrender: { 
         fn: function(component, eOpts){ 
          Ext.defer(function() { 
           if (component.up('window')){ 
            component.up('window').focus(); 
           } 
           component.focus(false, 100); 
          }, 30, this); 
         }, 
         scope: me 
        } 
       } 
0

afterlayout ईवेंट का उपयोग करें। स्थिरता के लिए कई बार ध्यान केंद्रित करने के लिए तत्व पर एक ध्वज सेट करें।

afterlayout: function(form) { 
    var defaultFocusCmp = form.down('[name=first]'); 
    if (!defaultFocusCmp.focused) { 
    defaultFocusCmp.focus(); 
    defaultFocusCmp.focused = true; 
    } 
}