Как открыть диалоговое окно jquery в фокусе редактора iggridupdating

Я использую Ignite UI grid. Мне нужно открыть диалоговое окно, когда конкретный редактор сосредоточен на вставке или обновлении новой строки. Режим редактирования — «строка».

Я могу открыть диалоговое окно, и я использую для этого событие editCellStarted и привязываю редактор к событию focus. Код выглядит следующим образом:

             $("#Grid").igGrid({
                       primaryKey: "keyCode",                           
                       autoCommit: true,
                       columns: _getColumnsResult,                           
                       features: [
                        {
                            name: 'Updating',                               
                            columnSettings: updateColSettings,                                
                            editMode: 'row',                                
                            editCellStarted: function (evt, ui) {
                              if(ui.columnKey=="Demo")
                             { 
                               $("#" + ui.columnkey + " input").bind('focus', { id: ui.columnIndex}, function (e) {                                          
                                $("dialog1").dialog();                                            
                               });                                  
                             }                                                                   
                            },          
                        }, //Updating feature ended                  
                        {
                            name: "Sorting",
                            type: "local",
                        },
                        {
                            name: "Selection",
                            mode: "row",
                            rowSelectionChanged: function (evt, ui) { Selectedrow = ui.row.index }
                        }]
                    });

Проблема: при нажатии кнопки "Добавить новый", если этот конкретный столбец является первым столбцом, фокус переходит в диалоговое окно и возвращается обратно в редактор. Фокус не остается в диалоговом окне.

Но если столбец отличается от первого столбца, код работает нормально.

Пожалуйста, помогите выполнить это. Заранее спасибо.

вот скрипка для этого.


person abc123    schedule 04.12.2013    source источник


Ответы (2)


Я не могу протестировать здесь, было бы хорошо, если бы вы могли предоставить jsFiddle в качестве примера, но может случиться так, что что-то еще связано с этим событием, которое возвращает фокус на строку, вы можете попробовать изменить код в предложении if добавить:

$("#" + ui.columnkey + " input").bind('focus', { id: ui.columnIndex}, function (e) {                                          
    e.stopPropagation();
    $("dialog1").dialog();
});  

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

В противном случае вам придется выяснить, что заставляет фокус вернуться к этой строке.

ИЗМЕНИТЬ

Итак, похоже, что фокус на самом деле сначала перемещается туда (до того, как сработает событие диалога), не уверен, почему диалог не сохраняет фокус - может быть, это асинхронно и есть проблема с синхронизацией, но вы можете исправить это, просто принудительное выделение диалога. Я добавил идентификатор к вашему вводу, а затем использовал его в обработчике событий:

$("#" + ui.columnKey + " input").bind('focus', function (e) {
    $("#dialog").dialog();
    $("#dia_inputbox").focus();
});

Рабочая скрипка здесь

Кроме того, я бы подумал, что вам не нужно привязываться к focus, а вместо этого просто открыть диалоговое окно непосредственно в обработчике для editCellStarted - это работает, но вы не можете переместить фокус назад, и если вы остановите распространение, ячейка не т редактировать правильно. Я также пробовал с editCellStarting. Приведенное выше решение работает, но похоже на взлом, должен быть способ сделать это более чисто, но я не уверен, что это такое.

person SpaceDog    schedule 05.12.2013
comment
да, вы правы, это какое-то другое событие, которое заставляет его сфокусироваться назад, и я не могу его идентифицировать. Я пробовал stopPropogation() ранее, он останавливал открытие диалогового окна. Я постараюсь предоставить скрипку. - person abc123; 05.12.2013
comment
Спасибо, событие фокуса происходит перед обработчиком, поэтому вы можете просто вернуть фокус. Я отредактировал свой ответ. - person SpaceDog; 06.12.2013

В качестве альтернативы, поскольку вы предоставляете параметры редактора, если этот диалог нужен только для одного поля, возможно, обработайте некоторые из события редактора вместо этого? Вот так:

//...
 {
    columnKey: "Name",
    editorOptions: {
        id: "Name",
        type: 0,
        focus: function (evt) {
            $("#dialog").dialog().children("input").focus();
        }
    }
}
//...

Скрипка

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

person Damyan Petev    schedule 10.12.2013
comment
диалоговое окно yes предназначено только для определенных полей. Эти поля являются полями ограничений базы данных, в которые данные вводятся из другой таблицы, которые извлекаются в соответствующем диалоговом окне. Но теперь проблема решена, и ее можно решить любым из двух предоставленных решений. Спасибо - person abc123; 11.12.2013