jquery tabIndex исправить - PullRequest
       5

jquery tabIndex исправить

0 голосов
/ 19 марта 2010

На моих страницах (ASP.NET 3.5), где все элементы управления вводом имеют порядок вкладок, каждый раз, когда следующий элемент управления не включен или скрыт, он переходит в адресную строку и затем к следующему доступному элементу управления. Чтобы исправить это поведение, то есть заставить его перейти к следующему доступному элементу управления без перехода к адресной строке, я пытаюсь использовать jQuery:

$(':text,textarea,select').blur(function()
{
    $(this).next(':text, textarea, select').filter(':enabled:visible').focus();        

});  

Но в некоторых случаях он все еще идет в адресную строку. Что мне нужно исправить здесь?

1 Ответ

1 голос
/ 19 марта 2010

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

Тем не менее, существует jQuery способ заставить то, что вы хотите, вы можете сделать что-то вроде этого:

$('form :input:enabled:visible').blur(function() {
  var con = $(this).closest('form').find(':input:enabled:visible');
  var i = con.index(this);
  setTimeout(function() { con.eq(i == con.length - 1 ? 0 : i + 1).focus(); }, 0);
});

Это меняет несколько вещей:

  • .next() ищет только следующий элемент
    • Это смотрит на <form> и получает следующее совпадение (измените form на body для всех входов).
  • Вкладка должна переходить к первому элементу при достижении конца
    • Используйте .index() и i == con.length - 1 ? 0 : i + 1 для этого
  • Последнее, событие focus посадочного элемента вызовет после этого размытия (по умолчанию)
    • Чтобы стрелять сразу после , используйте setTimeout(func, 0), как указано выше
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...