jQuery Выбираемая привязка события metaKey не совпадает с фактическим нажатием клавиши - PullRequest
2 голосов
/ 24 января 2012

Я использую компонент выбора jQuery UI.Для того, чтобы разрешить множественный выбор без удержания элемента управления / команды, у меня есть следующее: (из другого потока)

jQuery("#myUnorderedList").bind("mousedown", function(event) {
    return event.metaKey = true;
}).selectable();`

Это отлично работает и отлично подходит для выбора нескольких элементов и позволяет перетаскивать для выбора.Проблема заключается в том, что привязка mousedown к metaKey не обеспечивает такое же поведение, как при фактическом удержании клавиши команды / управления.

Вот короткая демонстрация экрана, показывающая поведение - пример демонстрации

Вот пример для jsfiddle (от другого пользователя, а не от меня) - metaKey установлен в true

В примере с jfiddle, скажем, если вы выбираете первые 4, щелкая и перетаскивая.4 выбраны.Так как metaKey установлен в true, мы можем нажать 5 или 6, чтобы добавить к выбору.Если вместо этого вы нажмете и перетащите на 5 и выше на 4 (который уже выбран), затем перетащите обратно на 5, не отпуская мышку, тогда 4 станет невыбранным.

Попробуйте то же самое, но на этот раз удерживая команду / контроль.Если выбраны первые 4, то вы нажимаете и перетаскиваете 5 (все еще с нажатой командой / управлением) вверх над 4 и обратно, 4 остается выбранным.

По сути, он делает невыбранные выбранные элементы при перетаскивании, но с нажатой клавишей управления / управления выбранные остаются выбранными.

У меня есть metaKey для console.log длякаждое событие останова, запуска, выбора, отмены выбора и все это возвращает true, когда metaKey привязан к mousedown, но поведение отличается от фактического удержания клавиши команды.

1 Ответ

0 голосов
/ 13 марта 2012

Они изменили поведение мета-ключа в jQuery 1.7.

См. Ошибка # 10666 @ bugs.jquery.com :

До jQuery 1.7

event.metaKey было назначено на основе этого кода:

 if ( !event.metaKey && event.ctrlKey ) {
      event.metaKey = event.ctrlKey;
 }

Но теперь в jQuery 1.7 код был изменен на следующее:

 if ( event.metaKey === undefined ) { 
     event.metaKey = event.ctrlKey;
 }

И этот код означает, чтоесли мы metaKey не определен, то и только тогда мы назначаем ctrlKey для metaKey.

...