Подтвердить что ты не робот

Настроить фокус на текстовое поле Extjs

В настоящее время у меня возникла проблема с настройкой фокуса на текстовое поле extjs. Когда появится форма, я хочу установить фокус на текстовое поле "Имя", и я пытаюсь использовать функцию build в функции focus(), но все равно не могу заставить ее работать. Я рад видеть ваше предложение.

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);
4b9b3361

Ответ 1

Иногда это помогает добавить небольшую задержку при фокусировке. Это связано с тем, что некоторые браузеры (Firefox 3.6 наверняка) нуждаются в дополнительном времени для визуализации элементов формы.

Обратите внимание, что метод ExtJS focus() принимает defer в качестве аргумента, поэтому попробуйте следующее:

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

Ответ 2

На основе Ответ Pumbaa80 и Ответ Танеля Я пробовал много вещей и нашел способ сделать это, Вот код:

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

Ответ 3

Вы должны использовать событие afterrender для своего текстового поля, если вы хотите установить фокус после визуализации формы.

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

Ответ 4

Попробуйте добавить следующее свойство:

hasfocus:true,

и используйте следующую функцию:

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

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

Ответ 5

Почему бы просто не добавить defaultFocus : '#first_name' вместо добавления ко многим строкам кода?

ИЛИ, после this.callParent(arguments); добавить эту строку Ext.getCmp('comp_id').focus('', 10);

Ответ 6

Я сегодня борюсь с этой проблемой, и я думаю, что получил решение. Трюк использует метод focus() после вызова метода show() на панели формы. То есть, добавление слушателя к событию 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);
            }
    });
    }
});

Ответ 7

Я также боролся с тем, чтобы сосредоточиться на текстовом поле в Internet Explorer (так как приведенные выше предложения отлично работают в Chrome и Firefox). Пробовал решения, предложенные выше на этой странице, но ни один из них не работал в IE. После стольких исследований я получил обходной путь, который работал у меня, я надеюсь, что это будет полезно и для других:

Используйте focus(true), или если вы хотите отложить это, используйте просто focus(true, 200). В ссылке на указанную проблему код будет выглядеть следующим образом:

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

Ответ 8

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

}