Обнаружение события «изменение» из списка выбора - щелчком мыши или нажатием клавиши - PullRequest
0 голосов
/ 16 марта 2011

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

В глубине это выглядит следующим образом:

У меня есть «список выбора» в строке таблицы.Всякий раз, когда пользователь выбирает элемент из этого списка, некоторые элементы управления (входы, выборки и т. Д.) Динамически загружаются под указанным «списком выбора» внутри следующей строки таблицы.

Что я хочу отсюда, так это то, чтоесли пользователь выбирает какой-либо элемент из «списка выбора» через клавиатуру и нажимает вкладку, фокус должен автоматически переключаться на самый первый элемент управления, который отображается динамически.Точно так же, если пользователь выбирает элемент из «списка выбора» с помощью мыши, фокус не должен никуда перемещаться.

Ниже приведен мой код для достижения того же:

$("#mySelectList").bind("change", function (e) {

var selList = $(this);

$.post("/someController/someAction", { paramOne: $(this).val() }, function (result) {

    // ..... //
    // consume "result" and load dynamic controls underneath the "select list"
    selList.closest('tr').next().find("input, select:first-child").focus(); // set focus to the next immediate control

}, 'json');

});

Извыше, все работает нормально при использовании «вкладки», но если пользователь выбирает с помощью мыши, фокус все еще перемещается к следующему динамическому элементу управления, что плохо.Я хочу сохранить фокус только на «списке выбора», если пользователь использует мышь, чтобы выбрать элемент.

Я также попытался использовать «keyup» вместо «change», но это вызывает «select list», чтобы выстрелить прямо сейчасajax-запросы, которые являются проблемой с точки зрения ненужного ajax-запроса при навигации по элементам управления, скажем, с помощью «вкладки вкладок вкладок» или «сдвиг вкладок + вкладка вкладок и т. д.».

Пожалуйста, дайте мне знать, если вы, ребята, знаете лучшеспособ достижения этого сценария.Я также с нетерпением жду возможного решения для каждого существующего браузера.

Жду ваших добрых ответов.

Заранее спасибо.

1 Ответ

1 голос
/ 16 марта 2011

Не уверен, что я точно понимаю, но как насчет этого?

var curFocus;

$("body *").focus(function(){ curFocus = $(this); });

$("#mySelectList").change(function(){
    var selList = $(this);

    if(curFocus[0] != selList[0]){
       $("#myOtherSelect").focus();
    }
});
...