Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Повторный клик по ссылке через время (https://javascript.ru/forum/dom-window/36168-povtornyjj-klik-po-ssylke-cherez-vremya.html)

Tolys 06.03.2013 00:16

Повторный клик по ссылке через время
 
Подскажите, как реализовать скрипт, который запретит часто нажимать на ссылку, точнее запретит на время. Если быть совсем точным, то человек после нажатия ссылки повторно сможет нажать только через час, например:D

Tolys 06.03.2013 00:19

Мне подсказали в чате код, но я толком не смог разобраться:
onclick="var a = this.href, t = this; t.href ='#'; setTimeout(function() { t.href = a }, 1000)"

Хотелось бы на примере посмотреть

danik.js 06.03.2013 05:01

При клике по ссылке запоминаешь время в localStorage. При последующем клике сначала проверяешь сколько времени прошло, и в случае чего предотвращаешь переход по ссылке.

Tolys 06.03.2013 08:25

а можно на примере показать?

ksa 06.03.2013 08:46

Цитата:

Сообщение от danik.js
При клике по ссылке запоминаешь время в localStorage. При последующем клике сначала проверяешь сколько времени прошло, и в случае чего предотвращаешь переход по ссылке.

Мне больше понравилась идея выше... :)
Вот мой вариант

<!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">
</style>
<script type="text/javascript">
$(document).ready(function (){
	$('a').click(function (){
		var o=$(this);
		if (o.data('on')==0) {
			alert('Действие приостановлено');
			return
		};
		alert('Действие выполнено');
		o.data('on',0);
		setTimeout(function (){
			o.data('on',1);
		},3000);
	});
});
</script>
</head>
<body>
<a href='#' data-on='1'>test</a>
</body>
</html>

danik.js 06.03.2013 09:10

Я думал под ссылкой подразумевается ссылка, а не кнопка. Почему люди не хотят называть вещи своими именами?
<a href="#">Ссыль</a>
<script>
    var delay = 1000 * 2; // 2с
    var link = document.querySelector('a');
    link.onclick = function() {
        var lastTime = +localStorage.lastTime;
        var nowTime = +new Date();
        if (lastTime && (lastTime + delay > nowTime)) {
            alert ('Низя!');
            return false;
        } else {
            localStorage.lastTime = nowTime;
        }
    }
</script>

ksa 06.03.2013 09:29

Цитата:

Сообщение от danik.js
Я думал под ссылкой подразумевается ссылка

Х/з чего там у автора... :D

Tolys 06.03.2013 12:53

danik.js,
неплохая идея))

Tolys 06.03.2013 12:56

а вот ещё вопрос, этот скрипт будет сразу для всех выполняться или для каждого персонально?

ksa 06.03.2013 13:01

Цитата:

Сообщение от Tolys
этот скрипт будет сразу для всех выполняться или для каждого персонально?

На какому элементу присвоиш обработчик - на том и будет выполняться.

В примере присваивается всем элементам "a"...

Tolys 06.03.2013 13:04

Опробовал, не открывает ссылку.. да и не выдаёт сообщение..

ksa 06.03.2013 13:10

Цитата:

Сообщение от Tolys
Опробовал

Мой скрипт рабочий. Это можно проверить на моём примере что выложен выше...

Что делаешь именно ты - я х/з... :)

Tolys 06.03.2013 13:12

я вот этот опробовал:
<a href="#">http://www.yandex.ru/</a>
	<script>
	    var delay = 1000 * 10; // 10с
	    var link = document.querySelector('a');
	    link.onclick = function() {
	        var lastTime = +localStorage.lastTime;
	        var nowTime = +new Date();
	        if (lastTime && (lastTime + delay > nowTime)) {
	            alert ('Низя!');
	            return false;
	        } else {
	            localStorage.lastTime = nowTime;
	        }
	    }
	</script>

ksa 06.03.2013 13:14

Цитата:

Сообщение от Tolys
я вот этот опробовал

Вопрос на чем ты это пробовал... :D
Где полный тестовый пример? У меня-то он есть - там все работает.

Tolys 06.03.2013 13:16

просто на страницу вставил.. (

ksa 06.03.2013 13:17

Tolys, если у тебя именно ссылка, по которой будет переход на другую страницу - как ты потом ту ссылку увидишь? Ведь ты уже на другой странице и там той ссылки нет.

Tolys 06.03.2013 13:18

ksa,
твой скрипт хороший, но там на test можно нажимать подряд. А мне хотелось бы, чтобы после того, как я раз нажму на ссылку, при повторной попытке у меня не вышло бы, текст какой-нибудь предупреждающий вылез..

Tolys 06.03.2013 13:18

ksa,
а если сделать, чтобы ссылка открывалась в новом окне?

ksa 06.03.2013 13:25

Цитата:

Сообщение от Tolys
при повторной попытке у меня не вышло бы, текст какой-нибудь предупреждающий вылез..

Так просто его убери... :D

Цитата:

Сообщение от Tolys
а если сделать, чтобы ссылка открывалась в новом окне?

Тогда другое дело!
Ты остался на странице... Вся информация по нажатию там...

ksa 06.03.2013 13:27

Цитата:

Сообщение от Tolys
А мне хотелось бы, чтобы после того, как я раз нажму на ссылку, при повторной попытке у меня не вышло бы, текст какой-нибудь предупреждающий вылез..

Так у меня как раз текст и появляется... Де событие отложено...

ksa 06.03.2013 13:32

Цитата:

Сообщение от Tolys
а если сделать, чтобы ссылка открывалась в новом окне?

Как вариант...

<!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">
</style>
<script type="text/javascript">
$(document).ready(function (){
	$('a').click(function (){
		var o=$(this);
		if (o.data('on')==0) {
			alert('Переход по ссылке пока не работает...');
			return
		};
		o.data('on',0);
		setTimeout(function (){
			o.data('on',1);
		},5000);
		window.open(o.data('url'),'');
	});
});
</script>
</head>
<body>
<a href='#' data-on='1' data-url='http://www.yandex.ru'>test</a>
</body>
</html>

Tolys 06.03.2013 13:42

блин, уже не знаю, что не так делаю... уже просто копирую и вставляю и не работает... При нажатии не открывает ссылку

Tolys 06.03.2013 13:45

Тут на сайте всё отлично работает.. прям как надо..

ksa 06.03.2013 13:45

Цитата:

Сообщение от Tolys
уже не знаю, что не так делаю..

Знать пришла пора показать содеяное! :D

Tolys 06.03.2013 13:57

хех)) а ведь и правда работает))

Tolys 06.03.2013 13:58

+ в зачёт форуму))

Tolys 06.03.2013 14:00

ksa,
единственный момент, который подкорректировать бы..)) при переходе в другой раздел сайта, помимо открытия этого раздела, в новом окне открывается главная страница) не подскажите, как ликвидировать это?)

ksa 06.03.2013 14:03

Цитата:

Сообщение от Tolys
при переходе в другой раздел сайта, помимо открытия этого раздела, в новом окне открывается главная страница

Вот про это вообще не понял... :blink:

Tolys 06.03.2013 14:07

:D ну вот есть разделы: Главная страница, форум, информация и test. Заходим на страницу test, пробуем ссылку. Сначала по ссылке проходим, потом запрещается переход. Ага, думаем, пойдём на форум. Открываем раздел, а в новом окне загружается ещё главная страница.)

ksa 06.03.2013 15:00

JS может что-то "помнить" только на странице...
Если нужно что-то "помнить вообще", пусть даже некоторое время... :) Нужно использовать некие "внешние" носители.
Например:
- куки
- сессия
- реквест
- данные в БД

Tolys 06.03.2013 15:11

эх.. жаль..

ksa 06.03.2013 15:28

Цитата:

Сообщение от Tolys
эх.. жаль..

Цитата:

Не жалей ты листья, не жалей, А жалей любовь мою, А жалей любовь мою и нежность. …
http://docmusic.ru/avtfww/txtfkh.html

P.S.
Видать весна... :D

danik.js 06.03.2013 16:11

Цитата:

Сообщение от Tolys
эх.. жаль..

А чего жаль? Что что-то можно хранить в куках/сессии/бд/локальном хранилище? Не знаю, мне почему-то не жаль )


Часовой пояс GMT +3, время: 06:45.