2014-09-08 2 views
0

У меня есть 2 таблицы на 1 странице. Я хотел бы, чтобы пользователь мог щелкнуть по таблице, а затем использовать клавиши со стрелками для перехода к предыдущему и следующему. Единственный способ, с помощью которого я мог активировать события блокировки во всех браузерах, - это привязать их непосредственно к «документу». Я подключил событие, чтобы добавить класс с сеткой в ​​сетку, которая находится в фокусе, и я попытался использовать это как селектор для своих событий, но тогда я не могу получить какое-либо действие по событию.привязка ключевых событий на уровне таблицы

Event Binding

function attachInitEvents() { 
    if ($self.config.pageHotKeysEnabled) { 
     var keyNav = function(e) { 
      if (e.keyCode == 37 && paging.hasPrevious) { // left 
       $self._log.info('Left arrow key pressed.'); 
       fetchData('prev'); 
      } 
      if (e.keyCode == 39 && paging.hasNext) { //right 
       $self._log.info('Right arrow key pressed.'); 
       fetchData('next'); 
      } 
     } 
     var $doc = $(document); 

     // hot key support 
     $doc.off('keyup'); 
     $doc.on('keyup', keyNav); 
    } 
} 

Я имею другой вопрос, где я делаю $ doc.off ('KeyUp'). Я думаю, что это часть проблемы, поскольку она отбрасывает все события keyup, что я действительно хочу, так это просто отменить событие, которое я пытаюсь прикрепить, если оно существует. В jQuery docs это технически говорит, что я должен использовать $ doc.off ('keyup', keyNav); развязать его, но он не отвязывает событие, и я получаю его кратные.

Так основные вопросы,

  1. Могу ли я вызвать событие KeyUp без привязки к документу и я могу сделать это от уровня стола?
  2. Как я могу правильно убедиться, что я не перевязываю снова и снова? Теперь, если на этой странице есть 2 таблицы, я думаю, я ожидал бы, что будет 2 событиями по одному для каждой таблицы, а затем класс с привязкой .grid будет тем, что позволяет событию запускать или нет?

Вот Fiddle: http://jsfiddle.net/93fp293w/

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

+0

1. Вы можете связать '.keyUp()' с чем угодно, но действительно имеет смысл привязать его к чему-то, что требует взаимодействия с клавиатурой. 2. Похоже, вы хотите отключить пузырь событий. Прочитайте метод 'e.stopPropagation()' и посмотрите, соответствует ли он вашим потребностям. – DevlshOne

+1

Я мог бы говорить глупости, но разве ты не можешь это сделать? это скрипка, в которой я пытался ... http://jsfiddle.net/puneethp/qfpyeydg/ – DarthCoder

+0

Спасибо Дарту, я даже не был уверен, как начать создавать скрипку за то, что я просил. Я обновляю свой вопрос, используя вашу скрипку, чтобы лучше понять, что происходит. – Tony

ответ

1

Проблема с подключением keyup заключается в том, что родительский div должен быть изменчивым (contenteditable). иначе вам придется прикрепить к документу.

Я обновил скрипку, может быть, взломщик, сообщите мне, если это сработает для вас?

http://jsfiddle.net/puneethp/qfpyeydg/3/

$(document).on("keyup", function (e) { 
e.target = $(".focus")[0]; 
.. 
} 

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

+0

Спасибо за объяснение, я предположил, что элемент должен был быть в состоянии получить фокус, но я надеялся, что класс можно использовать в качестве взлома. Хороший пример скрипача. В конце концов я закончил тем, что просто привязал событие к прыжку, и его работа хорошая. Цените время, потраченное на это :) – Tony

+1

Итак, я просто вернулся и посмотрел на скрипку, я не понял, что вы удалили редактируемый текст. Это действительно блестяще, я могу отследить, когда у меня есть момент, и использовать свой код для функциональности, потому что мне не нравится, как он работает, используя поле перехода. Отличная работа! – Tony

Смежные вопросы