Вызов ondblclick без вызова onclick-event
Есть ли простое решение без jquery внутри HTML-тегов, которое вызовет ondblclick
, не вызвав при этом onclick
?
Это всегда закрывает окно, хотя оно должно просто показывать предупреждение:
<a href="#" ondblclick="alert('dbl')" onclick="window.close();">X</a>
(он работает только во всплывающем окне javascript, потому что вы не можете закрыть главное окно с помощью window.close();
)
Ответы
Ответ 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>