Переход к следующей кнопке - PullRequest
       0

Переход к следующей кнопке

0 голосов
/ 16 сентября 2009

У меня есть ряд кнопок и других элементов управления. Когда пользователь нажимает Shift и *, я хочу перейти к следующему элементу управления (кнопка, текст или любой другой элемент управления). Как я могу сделать это в кратчайшие сроки.

Ответы [ 2 ]

0 голосов
/ 16 сентября 2009

Это, по общему признанию, глупое решение, но здесь идет.

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

  1. Получить все элементы класса "nav." Это элементы, на которые мы хотим переключить фокус.

  2. Из этого набора найдите ранее сфокусированный элемент и его индекс. К сожалению, Internet Explorer и FireFox либо не предоставляют способа, либо различаются по способам определения того, какой элемент был сфокусирован. Я обманываю здесь с пользовательским атрибутом "isFocused".

  3. Если не было ранее сфокусированного элемента, установите для самого первого элемента в наборе значение focus и добавьте в него атрибут isFocused.

  4. Если был ранее сфокусированный элемент, удалите из него атрибут isFocused и найдите следующий элемент nav после него. Этот код поддерживает запуск с начала набора, поэтому, если вы сфокусируете последний элемент с помощью этой техники и нажмете Shift + "*", первый элемент будет сфокусирован.

Есть проблемы с этим подходом. Он узколобый и не учитывает элементы, сфокусированные вручную пользователем. Он также назначает обработчик щелчка элементу HTML, чтобы перехватывать все действия. Возможно, это не самый эффективный способ решения этой проблемы.

$(document).ready
(
  function()
  {
    $("html").keydown
    (
      function(e)
      {
        if(e.shiftKey && e.keyCode == 42)
        {
          var wrappedElemSet = $(".nav");
          var focusedElementIndex = -1;
          var focusedElement;

          var elems = wrappedElemSet
               .each
               (
                 function(i)
                 {
                   if($(this).attr("isFocused"))
                   {
                     focusedElementIndex = i;
                     focusedElement = $(this);
                     return false;
                   }
                 }
               ) 

          if(focusedElementIndex == -1)
          {
            $(wrappedElemSet[0])
            .attr("isFocused", "isFocused")
            .focus();
          }
          else
          {
            var elementIndexToFocus = 
               focusedElementIndex == wrappedElemSet.size() + 1 ? 
                       0 : focusedElementIndex + 1;

            focusedElement.removeAttr("isFocused");                 
            $(wrappedElemSet[elementIndexToFocus])
               .attr("isFocused", "isFocused")
               .focus();                
          }             
        }   
      }
    );
  }
);
0 голосов
/ 16 сентября 2009
$("#theNextButton").focus();

и что касается смены + еще один ключ, который делается так:

var isShiftDown = false;
$(document).keyup(function (e) { 
    if(e.which == 16){
                    isShiftDown = false; 
    }
}).keydown(function(event){

    var code = event.keyCode;
    if(code == 16){ //left
                                    isShiftDown = true;
    }

    if(code == 37 && isShiftDown){ //left
                    //instead of traping left key, trap what you need
    }

});

вам придется придумать способ сосредоточиться на «следующем» контроле самостоятельно. это не должно быть слишком сложно. Сейчас я собираюсь сыграть в Fallout.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...