У меня есть следующий фрагмент кода для различения между щелчками и DoubleClick для:Отличить одного и двойной
observeSingleAndDoubleClick: function (element, singleClickHandler, doubleClickHandler, timeout) {
var clicks;
$(element).observe('click', function (event) {
++clicks;
if (clicks === 1) {
var timeoutCallback = function (event) {
if (clicks === 1) {
singleClickHandler.call(this, event);
} else {
doubleClickHandler.call(this, event);
}
clicks = 0;
};
timeoutCallback.bind(this).delay(timeout/1000);
}
}.bind(this));
}
Проблемы: событие не живет больше, когда обратный вызов задержки вызывается. Хотя он работает в Firefox, но это не в IE8. Объект события, переданный обработчикам кликов, является «мертвым», так как само событие уже передано.
У кого-нибудь есть совет, как решить эту проблему?
Я бы этого не сделал, честно говоря. Надежность таймеров браузера настолько мала, что вы будете сбивать пользователей с ума. Интернет просто не делает двойной щелчок в целом. – Pointy
Почему бы не использовать onclick и ondblclick? это объект, который его не поддерживает? http://msdn.microsoft.com/en-us/library/ms536921%28v=vs.85%29.aspx https://developer.mozilla.org/en/DOM/element.ondblclick – mplungjan
@mplungian даже с этим подход необходимо добавить какой-то код таймера. Зачем? Потому что каждый «dblclick» будет * также * сначала запускать событие «click». Таким образом, ваш обработчик событий «клик» должен ждать, чтобы увидеть, происходит ли также «dblclick». Это беспорядок. – Pointy