2012-09-15 3 views
2

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

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

Это кажется простым, но я узнал, что это было сложно ... (Как мне не удалось сделать это!)

Заранее спасибо вам помочь!

ответ

-1

Попробуйте это:

$(elm).click(
    function (event) { 
     if (event.ctrlKey == 1) { 
     window.open(link); 
     } 
     else { 
     window.location = link; 
     } 
    } 
); 
+0

Этой работу, но это временное решение. Я хочу, чтобы браузер обрабатывал модификаторы. Например, для MacOS нажатие клавиши для новой вкладки является мета, а не ctrl. –

+0

Downvote: JavaScript ≠ jQuery. Если OP не указал какую-либо библиотеку, по крайней мере сначала спросите в комментарии, если решения jQuery могут быть использованы. – MattiSG

1

API-интерфейс DOM Event уже предоставляет все, что вам нужно, если вы только должны помнить модифицирующие клавиши от законного действия пользователя.

При использовании addEventListener поймать событие, просто взять параметр, который является DOMEvent экземпляр, который передается функции обработчика, и отправить его на целевой элемент с dispatchEvent     :)

В самом деле, a DOMEvent экземпляр инкапсулирует исходную среду. Более конкретно здесь MouseEvent знает, какие клавиши были нажаты при его запуске.


Demo: попробуйте нажать на ссылку в this JSfiddle, удерживая (или Ctrl если не на Mac), например.

Для полной ссылки, здесь используются код:

var button = document.getElementById('source'), 
    target = document.getElementById('target'); 

function handler(evt) { 
    target.dispatchEvent(evt); // that's all the magic it takes 
} 

button.addEventListener(
    'click', // listen to a click event 
    handler, 
    false // no capture, i.e. do not catch events before children 
);​ 

Вы также можете найти this complete reference on DOM events полезной     :)

+0

Я уже пробовал это, но не получится ли эта ошибка: Неиспользуемая ошибка: DISPATCH_REQUEST_ERR: DOM Events Exception 1? –

+0

@NimaIzadi Я тестировал только с Safari 5, в котором он работал. Действительно, Chrome 21 выбрасывает 'DISPATCH_REQUEST_ERR' ... и FF 14 выдает' NS_ERROR_ILLEGAL_VALUE'. Довольно интересно. Я пытаюсь расследовать еще кое-что. – MattiSG

+0

Не работает в Safari 6. Я также получаю 'DISPATCH_REQUEST_ERR' ... –

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