Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.12.2013, 14:23
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Клик и двойной клик
Вот пример...

<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<!--
<link rel="stylesheet" type="text/css" href="tmp.css" />
-->
<style type="text/css">
.on {
	background-color: green;
}
</style>
<script type="text/javascript">
$(function (){
	$('li').click(function (){
		if (this.className=='on') {
			action();
		} else {
			select(this);
		};
	});
	$('li').dblclick(function (){
		select(this);
		action();
	});
});
function select(Obj) {
	$(Obj.parentNode).find('li').removeClass('on');
	Obj.className='on';
};
function action() {
	alert('Action!')
};
</script>
</head>
<body>
<ul>
	<li>Item 1</li>
	<li>Item 2</li>
	<li>Item 3</li>
</ul>
</body>
</html>

При клике элемент либо выделяется... Либо срабатывает "экшн", если элемент уже выделен...
На двойной клик навешено выделение и запуск экшна...

Но при таком раскладе при двойном клике выполняется клик+клик+двойной_клик и экшн запускается два раза.
Как обойти это?
Пока решил проблему через переменную... Но это не нравится... Есть еще какие варианты?
Ответить с цитированием
  #2 (permalink)  
Старый 18.12.2013, 14:51
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

ksa,

<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<!--
<link rel="stylesheet" type="text/css" href="tmp.css" />
-->
<style type="text/css">
.on {
	background-color: green;
}
</style>
<script type="text/javascript">
$(function (){
	$('ul').on('click','li:not(".on")',function (){
		select(this)
	});
    $('ul').on('click','.on',function (){
		action();
	});
});
function select(Obj) {
	$(Obj.parentNode).find('li').removeClass('on');
	$(Obj).addClass('on');
};
function action() {
	alert('Action!')
};
</script>
</head>
<body>
<ul>
	<li>Item 1</li>
	<li>Item 2</li>
	<li>Item 3</li>
</ul>
</body>
</html>
Ответить с цитированием
  #3 (permalink)  
Старый 18.12.2013, 14:51
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от Rise
Ну убери вообще dblclick и будет то что надо...
Праильное решение! (с)
Ответить с цитированием
  #4 (permalink)  
Старый 18.12.2013, 14:54
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

рони, принято как рабочий вариант...

А как-то "остановить" события не получится?
Ответить с цитированием
  #5 (permalink)  
Старый 18.12.2013, 15:00
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

Сообщение от ksa
А как-то "остановить" события не получится?
обьясни не понимаю ?
пока укороченный вариант ...
<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<!--
<link rel="stylesheet" type="text/css" href="tmp.css" />
-->
<style type="text/css">
.on {
	background-color: green;
}
</style>
<script type="text/javascript">
$(function (){
	$('ul').on('click','li',function (){
	   $(this).hasClass('on') ? action():select(this)
	});

});
function select(Obj) {
	$(Obj).addClass('on').siblings().removeClass('on');
};
function action() {
	alert('Action!')
};
</script>
</head>
<body>
<ul>
	<li>Item 1</li>
	<li>Item 2</li>
	<li>Item 3</li>
</ul>
</body>
</html>
Ответить с цитированием
  #6 (permalink)  
Старый 18.12.2013, 15:32
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от рони
обьясни не понимаю ?
Да я что-то зациклился на этом двойном клике... А он действительно не нужен тут.
Ответить с цитированием
  #7 (permalink)  
Старый 18.12.2013, 15:58
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 458

ksa, еще можно так:
<script src="//code.jquery.com/jquery-1.10.2.min.js"></script>

<style>.on{background-color:green;}</style>

<ul>
	<li>Item 1</li>
	<li>Item 2</li>
	<li>Item 3</li>
</ul>

<script>
$(function (){
	$('li').click( { p: 0 }, function(e) {
		if (e.data.p == this) {
			alert('Action!');
			return;
		}
		if (e.data.p) e.data.p.className = '';
		this.className = 'on';
		e.data.p = this;
	});
});
</script>
Ответить с цитированием
  #8 (permalink)  
Старый 18.12.2013, 16:08
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Rise, спасибо. Переделал все по первому варианту рони...
Ответить с цитированием
  #9 (permalink)  
Старый 18.12.2013, 16:28
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от ksa
Да я что-то зациклился на этом двойном клике...
Вот почему.
В ИЕ двойной клик это "отдельное" событие... И там по двойному клику все эти примеры не запустят экшн.
Ответить с цитированием
  #10 (permalink)  
Старый 18.12.2013, 17:33
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

ksa,
как вариант можно поменять click в моём коде на mouseup, а так да двойной клик везде 3 события click - click - dblclick в старых ие только 2 click - dblclick
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Клик по координатам major555 Общие вопросы Javascript 2 24.03.2013 22:21
сломался клик средней кнопкой Gvozd Сайт Javascript.ru 8 08.06.2012 17:57
Как при быстром многократном клике по кнопке обрабатывать только первый клик battrack jQuery 3 22.03.2012 10:47
Вместо наведения мыши, нужен клик Jaroslav jQuery 4 24.10.2011 10:50
Клик средней кнопки мыши testuser Общие вопросы Javascript 4 28.06.2011 09:14