Описание
На сайте нашего сообщества ник каждого пользователя - это ссылка на страницу их профиля, но если дважды щелкнуть по нику, под ним появится меню для этого пользователя.Содержимое этого всплывающего меню загружается с помощью вызова ajax.До сих пор мы использовали javascript: в hrefs привязки и ловили одиночные / двойные щелчки, используя JS.Мы хотели очистить ссылки и добавить соответствующие URL-адреса, чтобы пользователи могли открывать ссылки на профили во вкладках и т. Д., Сохраняя при этом меню двойного щелчка.Я понимаю, что это не самый лучший дизайн, это стало своего рода навязчивой идеей, чтобы начать работать.
Проблема
Поэтому я хочу, чтобы отдельные клики работали как обычно (отправьте браузер на href), в то время как двойной щелчок предотвращаетDefault и вызывает вместо нее пользовательскую функцию (событие).Я могу сделать это, используя window.location в одном клике, но это похоже на компромисс / хак, который я хотел улучшить.
Код до настоящего времени
Использование ответа 1067484 из вопроса 1067464 (не разрешено публиковать ссылки) в качестве основы для следующего
jQuery(document).ready(function($) {
$("#hello")
.bind('click', singleClick)
.bind('dblclick', doubleClick);
});
function singleClick(e) {
e.preventDefault();
var el = this;
setTimeout(function() {
var dblclick = parseInt($(el).data('double'), 10);
if (dblclick > 0) {
$(el).data('double', dblclick-1);
} else {
$('#result').html('click registered - browser should proceed to url');
// Attempting to make browser follow original href url:
$(el).unbind('click', singleClick);
}
}, 300);
}
function doubleClick(e) {
$(this).data('double', 2);
e.preventDefault();
$('#result').html('double-click registered - browser should stay here');
// Display dblclick popup-menu here
}
(Просмотр / редактирование в прямом эфире на http://jsbin.com/iboyo5/2)
Мне не хватает только этой части одним щелчком, я хотел "чище", чем window.location, и этопочему я возился с .unbind (), который тоже не является 100% решением.Функция .unbind () делает то, что я хочу, но она не выгружает обработчик для текущего выполнения кода, поэтому она работает только один раз для каждых двух кликов.Это проблема, которую мне нужно исправить сейчас.
Кстати: я не против, если первый .click приостановлен для установленной задержки.Необходимость подождать 300 мс, прежде чем URL-адрес «запустится», не проблема.
Я собираюсь отказаться от этого и использовать window.location?Можно ли это решить с помощью .live () и .die ()?
Надеюсь, я провёл достаточно хорошее исследование перед моим первым постом здесь.Спасибо!