Два события на одном объекте
<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, время: 03:38. |