2009-05-19 6 views
8

У меня есть страница, использующая JQuery и Jeditable для создания редактируемых текстовых элементов на странице.Клавиша Tab с полями JEditable

При редактировании элемента я хотел бы иметь возможность переходить от одного элемента к другому.

Я не уверен в том, как:

  • Использование jeditable или JQuery, чтобы захватить событие нажатия клавиши табуляции (скан = 9)

  • После этого события обнаружено, переместить фокус к следующему элементу и активировать его через jeditable

Любая помощь оценена. Благодаря!

+0

также видеть вопрос http://stackoverflow.com/questions/3890775/tabbing-between-jeditable-fields- in-a-table –

ответ

6

мне удалось найти способ сделать это:

$('div.editbox').bind('keydown', function(evt) { 
    if(evt.keyCode==9) { 
     $(this).find("input").blur(); 
     var nextBox=''; 
     if ($("div.editbox").index(this) == ($("div.editbox").length-1)) { 
       nextBox=$("div.editbox:first");   //last box, go to first 
      } else { 
       nextBox=$(this).next("div.editbox"); //Next box in line 
      } 
     $(nextBox).dblclick(); //Go to assigned next box 
     return false;   //Suppress normal tab 
    }; 
}); 

На вкладке, двойной щелчок (jeditable устанавливается здесь использовать событие DblClick) отправляется к следующему окну. Если это последнее поле редактирования (назначено уникальное класс, у меня были проблемы с селекторами), он переходит к первому.

Я также использовал find ("input"), поскольку мне не удалось найти другой селектор, который выбрал созданный jeditable вход для размытия.

Не оптимальный, но он работает.

+0

Любой может заставить это работать? то, что структура таблицы должно быть похоже на идентификаторы/классы и т. д. –

+0

понял, что этот пример не для datatables. пришлось переключить div на td и добавить поле редактирования в td и lasteditbos до последнего td –

+0

Привет Майк, я ответил по вашему вопросу: http://stackoverflow.com/questions/3890775/tabbing-between-jeditable -fields-in-a-table/7489132 # 7489132 – SylvanK

0

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

+0

Спасибо, но jeditable элементы не реагируют на focus(), что является частью проблемы. Я не уверен, как рассказать, что нужно сосредоточиться на элементе; поочередно мне может понадобиться симуляция двойного щелчка? Но универсальный слушатель для «tab» - неплохая идея. – SylvanK

1
$('div.edit').bind('keydown', function(evt) { 
if(evt.keyCode==9) { 
    var nextBox=''; 
    var currentBoxIndex=$("div.edit").index(this); 
    if (currentBoxIndex == ($("div.edit").length-1)) { 
      nextBox=$("div.edit:first");   
     } else { 
      nextBox=$("div.edit").eq(currentBoxIndex+1);  
     } 
    $(this).find("input").blur(); 
    $(nextBox).click(); 
    return false;   
}; 
}); 

не проверить это это поможет вам

+0

Хассан, это мой собственный код от решения проблемы другого пользователя с моим решением выше. http://stackoverflow.com/questions/3890775/tabbing-between-jeditable-fields-in-a-table/7489132#7489132 – SylvanK

0

Просто небольшое дополнение - если ваши jeditable поля вложены в другие элементы, то «nextBox = $ (это) .next ("div.editbox");» не будет работать, таким образом, создать массив «целевых» элементов и работы изнутри ...

$('.editable_textarea').bind('keydown', function(evt) { 
    if(evt.keyCode==9) { 
     $(this).find("input").blur(); 
     // create an array of targeted jeditable fields 
     var boxArray = $("#parent_element").find('.editable_textarea') 
     var nextBox = ''; 
     if ($('.editable_textarea').index(this) == ($('.editable_textarea').length-1)) { 
      nextBox = $(".editable_textarea:first");   //last box, go to first 
     } else { 
      // use the index of the active field to find the next one in the boxArray 
      nextBox = boxArray[$('.editable_textarea').index(this)+1]; //Next box in line 
     } 
     $(nextBox).click(); //Go to assigned next box 
     return false;   //Suppress normal tab 
    }; 
}); 
Смежные вопросы