Здравствуйте! Подскажите как принудительно поставить поле в фокус?

У меня по действию в разделе открывается inputBox в котором одно текстовое поле. Как его сразу поставить в фокус?

Нравится

9 комментариев

как-то так

var columnControl = addConditionView.items.getAt(0).getEl();
if (!columnControl.getValue()) {
	columnControl.focus();
}

Не совсем понял как это использовать. inputBox делаю следующим образом:

var config = {
                BarCode: {
                        dataValueType: Terrasoft.DataValueType.TEXT,
                        caption: 'Штрихкод'
                    }
};
Terrasoft.utils.inputBox('Отсканируйте ', callback, ['ok', 'cancel'], this, config,
                    {
                        defaultButton: 0
                    }
);

В Terrasoft.MessageBox.Items лежит только две кнопки "Ок" и "Отмена". Моего текстового поля там нет.

В Terrasoft.MessageBox.controlConfig есть мой BarCode но как его поставить в фокус на открытии inputBox?

Попробуйте в методе Init() напишите следующее

var tb = document.getElementById('textBoxId');
tb.focus()

Ну через DOM объект я сделал просто вот так:

$( document ).ready(function() {
                    $('.barcode input').focus();
                    $('.barcode input').keypress(function (event) {
                        if (event.which == '13') {
                            event.preventDefault();
                            $('span[data-item-marker=ОК]').click();
                        }
                    });
 });

Но решение на мой взгляд не "кошерное". Я думал может можно как-то с помощью дополнительных параметров поля это реализовать.

А в Terrasoft.MessageBox.init не заходит.

Здраствуйте. Зачем такие усложенения. Человеку нужно чтоб в нужном поле после загрузки страницы в нужном поле установился фокус. Та и в вашем методе нужно к тому же подключать внешнюю библиотеку JQuery. Для такой простенькой задачки подключать внешнюю библиотеку, когда это можно сделать "чистым" Javascript, как по мне нецелесообразно

Не после загрузки страницы а после отображения inputBox и в единственном поле. Библиотека JQuery у меня уже была подключена для других целей. Можно сделать и на чистом Javascript тут как-раз разницы никакой.

А в функции Init() не подойдет проставить фокус?

В Terrasoft.MessageBox.init ? Я переопределяю этот метод и туда не заходит процесс выполнения скрипта.

Извините, сразу не понял. Я думал, Вам просто нужно на карточку.

Показать все комментарии

Добрый день, коллеги.
Terrasoft XRM 3.3.2.304
Собственно не срабатывает событие OnFocusedControl для окна.
Может кто знает по какой причине и как это починить?
В окне несколько контейнеров.
Событие нужно для изменения элементов окна при смене активного контейнера.
Спасибо.

Нравится

2 комментария

Виктор, вероятно обработка события не вынесена в конфигурацию.
Завтра уточню у департамента разработки и сообщу результат.

Виктор, событие вынесено в конфигурацию, но оно отрабатывает только при программном вызове.
Например:
Self.FocusedControl = edtSubject;
Для Вашей задачи вызов этого события не подойдет, попробуйте использовать события OnExit/OnEnter

Показать все комментарии

Добрый день коллеги!

Не могу реализовать переход фокуса по полям в форме стрелками вверх, вниз, вправо,влево.

код обработчика события onKeyDown примерно такой:

function edtEditionsOnKeyDown(Control, Key, Shift) {
switch (Key.Value) {
case VK_UP:

Self.FocusedControl = edtText;
break;
case VK_DOWN:

Self.FocusedControl = edtText1;
break;
}
}

Внутрь события проваливается , но фокус не перемещается ни при каком раскладе.

Если любыми другими клавишами (ентер, бекспейс,ф1, ф2) то фокус нормально перемещается
как решить?

Нравится

1 комментарий

Здравствуйте
Воспользуйтесь событием OnKeyUp, стрелки вверх и вниз передают фокус передается контролам.

function edtTest2OnKeyUp(Control, Key, Shift) {
if (Key.Value == 40)
{
MessageBox(Key.Value);
 
Self.FocusedControl =  edtTest1;
}
else
{
MessageBox(Key.Value);
Self.FocusedControl =  NumericEdit;
}
Показать все комментарии