Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 25.05.2019, 21:51
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от Alexodiy
А как лучше сделать, тоесть вместо localStorage.launch = checkbox.checked; сделать событие например

$(".link").on("click", function(){
// тут запишем ключ и по нему потом проверяем вместо checkbox.checked
}


?
Что-то вы намудрили... И очень сильно... Вот, смотрите, в телефоне есть переключатель Wi-Fi, я нажимаю на него и Wi-Fi выключается, ещё раз нажму... Wi-Fi включится! Так я тут сделал. Вы нажимаете, оно выключается, еще раз нажимаете: включается!

А то, что вы предложили с ссылкой, я такого не понял... Для аналогии: допустил это был бы не переключатель Wi-Fi, а по вашему методу: ссылка. Вот, нажимает пользователь в телефоне ссылку Wi-Fi, и куда-то переходит, и как понять такой переключатель?
Ответить с цитированием
  #12 (permalink)  
Старый 26.05.2019, 07:26
Интересующийся
Отправить личное сообщение для Alexodiy Посмотреть профиль Найти все сообщения от Alexodiy
 
Регистрация: 22.09.2017
Сообщений: 26

Сообщение от Malleys Посмотреть сообщение
Что-то вы намудрили... И очень сильно... Вот, смотрите, в телефоне есть переключатель Wi-Fi, я нажимаю на него и Wi-Fi выключается, ещё раз нажму... Wi-Fi включится! Так я тут сделал. Вы нажимаете, оно выключается, еще раз нажимаете: включается!

А то, что вы предложили с ссылкой, я такого не понял... Для аналогии: допустил это был бы не переключатель Wi-Fi, а по вашему методу: ссылка. Вот, нажимает пользователь в телефоне ссылку Wi-Fi, и куда-то переходит, и как понять такой переключатель?
Почему намудрил... Мне надо отследить переход по ссылке на другой источник и офнуть всю выше изложенную логику. Скажем так, есть страница, на которой присутствует различная информация - к ней я как раз и подвязываю "Отображать уведомление при каждой третьей загрузке"... Каждый третий раз, к примеру, появляется уведомление "Оставьте отзыв на этой странице" и это ссылка с переходом на другой ресурс вообще с target="_blank"-ом. Если пользователь кликает по этой ссылке, уведомление каждый третий раз перестает появляться.

Я написал вам в личку, с подробностями, так как мне не желательно светить тему публично
Ответить с цитированием
  #13 (permalink)  
Старый 26.05.2019, 09:33
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Простите, что не сразу ответил! Да, то что вы описали в видео, лучше всего сделать при помощи ссылки, ведь она ведёт на страницу отзывов!

В таком случае, там совсем другая логика!

Каждый третий раз ссылка, на которую ещё не нажимали, появляется. Если на неё нажать, происходит переход, а вместо ссылки появляется «Спасибо»! При следующих заходах вместо такой ссылки пишут, что вы уже оставляли отзыв!

Данные получаются/сохраняются при помощи функции getData/saveData, которые получают/сохраняют данные в локальном хранилище, но вы можете, если хотите, переписать эти функции, чтобы данные получались/сохранялись удалённо (например на сервере)

Сама ссылка всегда открывается в новой вкладке (если функционал предполагает, то почему бы не автоматизировать!) Каждая такая ссылка должна иметь в атрибуте id префикс (в данном случае rating-), после которого идёт уникальный номер (например, натуральные числа по порядку) Это позволяет однозначно обозначить ссылку на любой странице и сказать, посещали её или нет!

Вот пример...
<script>
document.addEventListener("DOMContentLoaded", function() {
	function getData() {
		var data = "ratingData" in localStorage ?
			JSON.parse(localStorage.ratingData) : { count: 1 };
		return Promise.resolve(data);
	}
	function saveData(ratingData) {
		localStorage.ratingData = JSON.stringify(ratingData);
		return Promise.resolve("ok");
	}

	var PREFIX = "rating-";
	var links = Array.from(
		document.querySelectorAll("a[id^='" + PREFIX.replace(/'/g, "\\'") + "']")
	);
	
	var hasBeenRatedElement = document.createElement("span");
	hasBeenRatedElement.innerHTML = "Вы уже оставляли отзыв!";
	
	var thanksElement = document.createElement("span");
	thanksElement.innerHTML = "Спасибо!";
	
	getData().then(function(ratingData) {		
		links.forEach(function(link) {
			var id = link.id.replace(PREFIX, "");

			if(id in ratingData) {
				link.parentNode.insertBefore(hasBeenRatedElement.cloneNode(true), link);
				link.parentNode.removeChild(link);
			} else {
				if(ratingData.count !== 0) {
					link.parentNode.removeChild(link);
					return;
				}
				
				link.target = "_blank";
				link.addEventListener("click", function() {
					ratingData[id] = 1;
					saveData(ratingData);
					
					link.parentNode.insertBefore(thanksElement.cloneNode(true), link);
					link.parentNode.removeChild(link);
				});
			}
		});
		
		ratingData.count = (ratingData.count + 1) % 3;
		saveData(ratingData);
	});
});
</script>

<p><a id="rating-1" href="https://google.com/">Оставить отзыв 1</a></p>
<p><a id="rating-2" href="https://ya.ru/">Оставить отзыв 2</a></p>


Такие ссылки могут храниться в таблице в базе данных, тогда вы можете легко ими управлять, также в других таблицах может быть ссылка на первичный ключ `id` и пр.
Код:
+------+---------------------+
| id   | link                |
+------+---------------------+
|    1 | https://google.com/ |
|    2 | https://ya.ru/      |
+------+---------------------+

О, да! Язык не называется YuhvuhScreapt, он называется JavaScript. Может вам поможет эта табличка с некоторыми словами web-разработки! http://malleys.lark.ru/english.html

Последний раз редактировалось Malleys, 26.05.2019 в 09:55.
Ответить с цитированием
  #14 (permalink)  
Старый 26.05.2019, 10:11
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,108

Сообщение от Malleys
PREFIX.replace(/'/g, "\\'")
зачем replace?
Ответить с цитированием
  #15 (permalink)  
Старый 26.05.2019, 10:25
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от рони
зачем replace?
PREFIX — это префикс, который можно поменять, вдруг человек захочет var PREFIX = "click'n'rate-"; и сейчас это будет работать, поскольку селектор на 15 строке не поломается! Ну чтобы было...
<p><a id="click'n'rate-1" href="https://google.com/">Оставить отзыв 1</a></p>
и т. д.
Ответить с цитированием
  #16 (permalink)  
Старый 26.05.2019, 10:34
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,108

Сообщение от Malleys
Ну чтобы было...
тогда вопрос, зачем нужен такой префикс? где это применяется?
Ответить с цитированием
  #17 (permalink)  
Старый 26.05.2019, 10:39
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от рони
тогда вопрос, зачем нужен такой префикс? где это применяется?
Вот, на 14 строке ведь написано, что находятся все ссылки, которые будут себя вести таким образом (т. е. появляться раз в три раза, говорить «Спасибо»)

Префикс нужен, чтобы отличить от других ссылок, которые так не должны себя вести!

Применяется при поиске элементов, при сохранении списка посещённых ссылок.
Ответить с цитированием
  #18 (permalink)  
Старый 26.05.2019, 10:50
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,108

Сообщение от Malleys
Вот, на 14 строке ведь написано
я спрашивал про ', что даёт одинарная кавычка в id, это где-то применяется(например в каком-то фреймворке, только так пишут id) или это искуственно созданная проблема?
и так на всякий случай ... вариант без replace.
<p><a id="click'n'rate-1" href="https://google.com/">Оставить отзыв 1</a></p>
<script>
var PREFIX = "click'n'rate-";
var el = document.querySelector('[id^="'+PREFIX+'"]');
alert(el);
</script>

Последний раз редактировалось рони, 26.05.2019 в 11:03.
Ответить с цитированием
  #19 (permalink)  
Старый 26.05.2019, 11:03
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от рони
вариант без replace
Ок, теперь всё ломается, если в имени префикса есть "!
Ответить с цитированием
  #20 (permalink)  
Старый 26.05.2019, 11:21
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,108

Malleys,
Сообщение от рони
это искуственно созданная проблема
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Событие при изменении размера окна в диапазоне (для адаптивной верстки) spo Общие вопросы Javascript 4 02.10.2014 15:51
переопределение переменных при событие onchange lw091190 Элементы интерфейса 0 29.06.2014 12:07
Новые элементы в блоке при событие onmouseleave b14de Events/DOM/Window 2 29.05.2014 07:56
Событие mouseout при наведении мыши на пункт меню WalterScott Events/DOM/Window 2 12.05.2009 22:05
Не отрабатывает событие onmouseout при внедрении нового слоя ilshat Элементы интерфейса 3 28.07.2008 06:27