Необходимо отменить события click / mouseup при обнаружении события двойного щелчка

Как это сделать?

 rahul01 июл. 2009 г., 07:55
Для того же элемента или для всего документа?

Ответы на вопрос(5)

 01 июл. 2009 г., 08:58
Классная штука и хорошая статья. +1

отправляющей форму (что не обязательно относится к оригинальному постеру, но может быть и для других людей, попадающих сюда через Google), более простым вариантом будет отключение элемента, на который нажимают в ваш обработчик события click:

$(selector).click(function(e) {
    $(this).prop('disable', true);
}

реализации настраиваемого события одним кликом. Делая это, вы можете использовать его, как и любое другое событие, поэтому:

$('#el').singleclick(function(){});
// or event
$('#el').bind('singleclick', function(){});

Он также предоставляет настраиваемые события для последнего и первого клика в серии кликов. И пользовательское событие lastclick фактически передает количество кликов назад! Так что вы могли бы сделать это!

$('#el').lastclick(function(event,clicks){
    if ( clicks === 3 ) alert('Tripple Click!');
});

Вы можете найти исходный код для определения пользовательского событияВот.

Это открытый исходный код под лицензией AGPL, так что вы можете свободно выбирать то, что вам нужно, без лишних забот! :-) Он также активно развивается изо дня в день, поэтому вам никогда не понадобится поддержка.

Но самое главное, это DRY Plugin / Effect Framework, который позволяет вам гораздо легче разрабатывать плагины и расширения. Надеюсь, это поможет достичь этой цели!

Решение Вопроса

и я на самом деле не думаю, что это можно сделать легко. (Некоторое обсуждение этого)

Если для вас очень важно иметь эту функциональность, вы можете взломать ее так:

function singleClick(e) {
    // do something, "this" will be the DOM element
}

function doubleClick(e) {
    // do something, "this" will be the DOM element
}

$(selector).click(function(e) {
    var that = this;
    setTimeout(function() {
        var dblclick = parseInt($(that).data('double'), 10);
        if (dblclick > 0) {
            $(that).data('double', dblclick-1);
        } else {
            singleClick.call(that, e);
        }
    }, 300);
}).dblclick(function(e) {
    $(this).data('double', 2);
    doubleClick.call(this, e);
});

И вотпример этого на работе.

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

 22 нояб. 2012 г., 13:46
Сайт плагинов jQuery недоступен, но это изящное расширение jQuery в GitHub связано с разделом комментариев на сайте jQuerygist.github.com/399624
 01 июл. 2009 г., 08:20
Кстати, уже есть плагин для этогоplugins.jquery.com/project/FixClick который решает это похоже на Паоло Бергантино
 Daddy Warbox01 июл. 2009 г., 08:17
На самом деле, не могу ли я просто заблокировать последующие события одного щелчка в течение продолжительности двойного щелчка? Я думаю, что это решило проблему задержки.
 Daddy Warbox01 июл. 2009 г., 08:11
Что ж, похоже, это работает, но есть определенная проблема - не обнаруживать регулярные клики в течение 0,5 секунд. Конечно, я мог бы сократить время, но ... да ладно. Я сам тогда это выясню. Спасибо, в любом случае.
 01 июл. 2009 г., 08:12
Да, я думаю, 250 или даже меньше, вероятно, разумно ожидать, насколько двойные щелчки идут. Я занимался этим серьезным поиском, и, видимо, это лучшее, что вы получите. Я мог бы сделать из него плагин, чтобы скрыть уродливое, если тебе от этого станет лучше. :)

последствия одиночного против двойного щелчка - хотя он говорит в контексте Windows, то, что он говорит, имеет отношение к дизайну пользовательского интерфейса на основе браузера.

По сути, действие, выполняемое по двойному щелчку, должно быть логичным делом после одного щелчка. Так, например, в пользовательском интерфейсе рабочего стола один щелчок выбирает элемент, а двойной щелчок открывает его (например, открывает файл или запускает приложение). Пользователь все равно должен выбрать файл, чтобы открыть его, поэтому не имеет значения, что действие с одним щелчком мыши выполняется перед действием с двойным щелчком.

Если у вас есть компонент пользовательского интерфейса, действие которого при двойном щелчке полностью не связано с действием по одному щелчку, так что возникает необходимость предотвратить выполнение действия по одному щелчку, как только система осознает, что это был фактически двойной щелчок, тогда вам действительно следует переосмыслить дизайн. Пользователи найдут его неловким и нелогичным, поскольку он не будет действовать так, как он привык к действующим вещам.

Если вы все еще хотите пойти по этому пути, то вам придется либо использовать технику устранения неполадок (в этом случае все действия с одним щелчком мыши будут отложены), либо внедрить некоторый механизм, посредством которого обработчик двойного щелчка отменяет работу, выполняемую обработчиком одиночного щелчка ,

Вы также должны знать, что некоторые пользователи устанавливают очень длительное время двойного щелчка. У кого-то, например, с артритическими руками, может быть время двойного щелчка, установленное в системных настройках, больше, чем секунда, поэтому метод устранения неполадок, основанный на произвольном периоде времени по вашему выбору, сделает компонент пользовательского интерфейса недоступным для этих людей, если выполнение действия одним щелчком исключает действие двойного щелчка. & Quot; отменить то, что только что произошло одним кликом & quot; Насколько я знаю, техника - единственный жизнеспособный обходной путь для этого.

 03 сент. 2010 г., 00:45
это хорошие моменты!
 25 мар. 2013 г., 08:44
Хорошая мысль о том, что пользователи могут устанавливать свое собственное время двойного щелчка ... Я не хочу ждать целую секунду, прежде чем выполнить действие одиночного щелчка, поэтому ожидание двойного щелчка с таймаутом практически бесполезно
 25 мар. 2013 г., 08:46
иногда действие двойного щелчка является логическим продолжением после одного щелчка, и, возможно, было бы хорошо выполнить действие единого щелчка и раньше (так оно и есть у меня сейчас), но действие одного щелчка может вызвать некоторые дополнительные загрузить (или, в моем случае, трафик данных), который вы хотели бы предотвратить (хотя это точно не повредит)

Ваш ответ на вопрос