Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.05.2013, 00:44
Кандидат Javascript-наук
Отправить личное сообщение для zzzzzz Посмотреть профиль Найти все сообщения от zzzzzz
 
Регистрация: 25.09.2012
Сообщений: 111

Два события на одном объекте
<td onclick='openGroupBM(this)' ondblclick='editNamegroup(this)'>текст</td>
при одиночном клике срабатывает функция от онклик - все првильно,

а при двойном, два раза функция от онклик а уже потом от даблклик.

как при даблклик сделать так чтобы онклик функция не срабатывала?

Заранее спасибо
Ответить с цитированием
  #2 (permalink)  
Старый 26.05.2013, 11:24
Аспирант
Отправить личное сообщение для elnoro Посмотреть профиль Найти все сообщения от elnoro
 
Регистрация: 23.06.2011
Сообщений: 39

Не очень элегантное решение через глобальную переменную и setTimeout:
function openGroupBM (elem) {
    timer = setTimeout(function() {
    /* старый код */
    }, 1000)
}
function editNamegroup(elem) {
    clearTimeout(timer);
    /* старый код */
}
Ответить с цитированием
  #3 (permalink)  
Старый 26.05.2013, 22:17
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

<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

Последний раз редактировалось bes, 26.05.2013 в 22:20.
Ответить с цитированием
  #4 (permalink)  
Старый 27.05.2013, 08:22
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Кстати задержка у разных пользователей может быть разной, поэтому такое решение костыльное и нестабильное. Лучше избегать его использования.
Ответить с цитированием
  #5 (permalink)  
Старый 27.05.2013, 18:53
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от danik.js
Кстати задержка у разных пользователей может быть разной, поэтому такое решение костыльное и нестабильное. Лучше избегать его использования.
danik.js, у тебя есть другой вариант?
Ответить с цитированием
  #6 (permalink)  
Старый 27.05.2013, 19:08
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,491

Сообщение от bes Посмотреть сообщение
danik.js, у тебя есть другой вариант?
Да. В таких случаях dblclick отдельно не вешается - функция срабатывает при повторном onclick в течении задержки. Кстати средняя dblclick задержка - 300мс.
__________________
29375, 35
Ответить с цитированием
  #7 (permalink)  
Старый 27.05.2013, 19:21
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от Aetae
Да. В таких случаях dblclick отдельно не вешается - функция срабатывает при повторном onclick в течении задержки. Кстати средняя dblclick задержка - 300мс.
где именно?
в варианте elnoro второй onclick точно сработает, хоть и с задержкой вру
в варианте elnoro последовательность onclick dblclick не гарантирована и зависит от времени задержки
в моём варианте этому помешает флаг
флаг гарантирует, что второй onclick не сработает раньше времени задержки, коего достаточно для того, чтобы сработал dblclick
или я не понял о чём речь

Последний раз редактировалось bes, 27.05.2013 в 19:44.
Ответить с цитированием
  #8 (permalink)  
Старый 28.05.2013, 08:48
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,491

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 += ' &nbsp;&nbsp;&nbsp;'+ i + '(' + trueI + ')';
}
 
id('but5').onclick = multiclick(
    250,
    alertIndex,
    alertIndex,
    alertIndex,
    alertIndex,
    alertIndex
);
 
id('but2').onclick = multiclick(
    250,
    alertIndex,
    alertIndex
);
</script>
__________________
29375, 35
Ответить с цитированием
  #9 (permalink)  
Старый 29.05.2013, 13:33
Аватар для Denis_od
Новичок на форуме
Отправить личное сообщение для Denis_od Посмотреть профиль Найти все сообщения от Denis_od
 
Регистрация: 28.05.2013
Сообщений: 7

Жмите по кнопке http://jsfiddle.net/z2w6D/1/
Ответить с цитированием
  #10 (permalink)  
Старый 29.05.2013, 13:41
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,491

Denis_od, и?
Если кликнуть один раз, а затем кликнуть второй раз через 300 мс у вас сработает и клик и даблклик.
Читайте тему. Вышеописанные проблемы касаются и вас. То что вы написали такое же косячное дерьмо на jquery, не делает это дерьмо менее косячным.
__________________
29375, 35
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать два события на одно нажатие кнопки mixt Events/DOM/Window 11 30.09.2017 20:44
Не могу связать два события для разных элементов. nono Элементы интерфейса 8 07.03.2013 19:36
можно ли на объект повесить два события одновременно? andrew_F Общие вопросы Javascript 5 30.04.2012 14:51
Множество событий на одном объекте (Sandr) Общие вопросы Javascript 5 30.03.2012 22:22
Блок переключения меню на JS, два скрипта в одном файле Dizeloid Элементы интерфейса 0 30.07.2009 12:03