Два события на одном объекте
<td onclick='openGroupBM(this)' ondblclick='editNamegroup(this)'>текст</td>
при одиночном клике срабатывает функция от онклик - все првильно, а при двойном, два раза функция от онклик а уже потом от даблклик. как при даблклик сделать так чтобы онклик функция не срабатывала? Заранее спасибо |
Не очень элегантное решение через глобальную переменную и setTimeout:
function openGroupBM (elem) { timer = setTimeout(function() { /* старый код */ }, 1000) } function editNamegroup(elem) { clearTimeout(timer); /* старый код */ } |
<button id="but">click</button> <script> (function () { var flag = true; but.onclick = function () { if (flag) { console.log('click'); } flag = false; setTimeout(function () {flag = true}, 500); } but.ondblclick = function () { console.log('dblclick'); } })(); </script> http://learn.javascript.ru/events-and-timing-depth |
Кстати задержка у разных пользователей может быть разной, поэтому такое решение костыльное и нестабильное. Лучше избегать его использования.
|
Цитата:
|
Цитата:
|
Цитата:
в варианте elnoro последовательность onclick dblclick не гарантирована и зависит от времени задержки флаг гарантирует, что второй onclick не сработает раньше времени задержки, коего достаточно для того, чтобы сработал dblclick или я не понял о чём речь |
bes, время dblclick можно настроить в винде как те нравится. Поставит какой-нить инвалид секунду и всё тазом накроется.
Примерно так делается: <button id="but2">click 2</button> <button id="but5">click 5</button> <div style="background:#ddf;color:#220" id="out"></div> <script> function multiclick(delay){ var clicks = Array.prototype.slice.call(arguments,1), length = clicks.length, index = 0, timer; return function(event){ var self = this, i = Math.min(++index, length); clearTimeout(timer); timer = setTimeout(function(){ clicks[i-1].call(self, event, i, index); index = 0; }, delay) } } function id(i){return document.getElementById(i)}; function alertIndex(e, i, trueI){ out.innerHTML += ' '+ i + '(' + trueI + ')'; } id('but5').onclick = multiclick( 250, alertIndex, alertIndex, alertIndex, alertIndex, alertIndex ); id('but2').onclick = multiclick( 250, alertIndex, alertIndex ); </script> |
Жмите по кнопке http://jsfiddle.net/z2w6D/1/
|
Denis_od, и?
Если кликнуть один раз, а затем кликнуть второй раз через 300 мс у вас сработает и клик и даблклик. Читайте тему. Вышеописанные проблемы касаются и вас. То что вы написали такое же косячное дерьмо на jquery, не делает это дерьмо менее косячным. |
Часовой пояс GMT +3, время: 21:42. |