Подтвердить что ты не робот

Вызов ondblclick без вызова onclick-event

Есть ли простое решение без jquery внутри HTML-тегов, которое вызовет ondblclick, не вызвав при этом onclick?

Это всегда закрывает окно, хотя оно должно просто показывать предупреждение:

<a href="#" ondblclick="alert('dbl')" onclick="window.close();">X</a>

(он работает только во всплывающем окне javascript, потому что вы не можете закрыть главное окно с помощью window.close();)

4b9b3361

Ответ 1

Мое предположение заключается в том, что каждое решение будет также иметь проблему с длительностью тайм-аута doubleclick, изменяющейся по пользовательским настройкам, описанной Ирвином Домининым aka Edward в комментарии выше:

Из jQuery-документов, но связанных: "Нецелесообразно привязывать обработчики к как события click и dblclick для одного и того же элемента. Последовательность событий запускается от браузера к браузеру, а некоторые получая два события щелчка перед dblclick, а другие - только один. Двойная чувствительность (максимальное время между обнаруженными кликами как двойной клик) может варьироваться в зависимости от операционной системы и браузера, и часто настраиваемый пользователем."

Я отказался от использования doubleclick и вместо этого использовал CTRL + click:

<a href="#" onclick="if(event.ctrlKey) { 
 alert('CTRL+Mouseclick'); return false; 
} else { window.close(); }">X</a>

см

Catch onclick-event с нажатой клавишей CTRL

Ответ 2

У меня решена это с помощью приведенного ниже кода,

<a id="press" href="javascript:void(0)" onclick="singleClick(event)"
    ondblclick="doubleClick(event)">Click here</a>

<div id="log"></div>

Мой JavaScript будет,

    var timer;
    var status = 1;

    function singleClick(event) {
        status = 1;
        timer = setTimeout(function() {
            if (status == 1) {
                document.getElementById("log").innerHTML ='I  am single click !';
            }
        }, 500);

    }

    function doubleClick(event) {
        clearTimeout(timer);
        status = 0;
        document.getElementById("log").innerHTML = 'I  am a double  click!';
    }

Пожалуйста, дайте мне знать статус. Надеюсь, это поможет.

Ответ 3

Я думаю, что это сложная ситуация, вы можете использовать таймаут, но вы не можете быть уверены в правильном поведении.

В jQuery (но ваниле тоже) docs есть важная заметка, которая говорит нам избегать обработки как одиночного, так и двойного щелчка:

Не рекомендуется связывать обработчики как с кликом, так и с dblclick события для одного и того же элемента. Последовательность инициируемых событий изменяется от браузера к браузеру, причем некоторые из них получают два события click dblclick и другие только один. Двойная чувствительность (максимум время между щелчками, которое обнаруживается как двойной щелчок) может варьироваться в зависимости от операционной системы и браузера, и часто настраивается пользователем.

Итак, подумайте, что вкратце:

  • если вы можете реорганизовать свой пользовательский интерфейс с помощью одного обработчика
  • альтернативно использовать таймаут, как предложено здесь, но не будет пуленепробиваемым

Ответ 4

JS:

var single;

HTML:

<a href="#" 
  ondblclick="single=0; alert('dbl')" 
  onclick="single=1; setTimeout(function(){
    if (single) window.close();
  },300);">X</a>

Ответ 5

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

Ответ 6

Я знаю, что это не то, что вы хотите сделать для своего вопроса, но здесь можно легко использовать клик и двойной:

Если вам нужно выбрать объект щелчком (или сохранить переменную, например), вы можете использовать javascript для вызова функции в "href".

Затем вы можете использовать "ondblclik()" для непосредственного редактирования реестра без нажатия кнопки редактирования.

Функция в "href" всегда выполняется, поэтому не проверяйте ее с помощью "alert()", вы не получите двойной щелчок, когда откроется окно сообщения. Он запускается 2 раза, затем выполняет действие, которое может быть проблемой, но не для сохранения или обновления переменных.

function clickMe(c){
  var link = document.getElementById('link');
  link.innerHTML = "Clicked: "+c;
}
<a id="link" href="javascript:clickMe(1);void(0);" ondblclick="clickMe(2);">Click Me</a>