25.05.2019, 21:51
|
|
Профессор
|
|
Регистрация: 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, и куда-то переходит, и как понять такой переключатель?
|
|
26.05.2019, 07:26
|
Интересующийся
|
|
Регистрация: 22.09.2017
Сообщений: 26
|
|
Сообщение от Malleys
|
Что-то вы намудрили... И очень сильно... Вот, смотрите, в телефоне есть переключатель Wi-Fi, я нажимаю на него и Wi-Fi выключается, ещё раз нажму... Wi-Fi включится! Так я тут сделал. Вы нажимаете, оно выключается, еще раз нажимаете: включается!
А то, что вы предложили с ссылкой, я такого не понял... Для аналогии: допустил это был бы не переключатель Wi-Fi, а по вашему методу: ссылка. Вот, нажимает пользователь в телефоне ссылку Wi-Fi, и куда-то переходит, и как понять такой переключатель?
|
Почему намудрил... Мне надо отследить переход по ссылке на другой источник и офнуть всю выше изложенную логику. Скажем так, есть страница, на которой присутствует различная информация - к ней я как раз и подвязываю "Отображать уведомление при каждой третьей загрузке"... Каждый третий раз, к примеру, появляется уведомление "Оставьте отзыв на этой странице" и это ссылка с переходом на другой ресурс вообще с target="_blank"-ом. Если пользователь кликает по этой ссылке, уведомление каждый третий раз перестает появляться.
Я написал вам в личку, с подробностями, так как мне не желательно светить тему публично
|
|
26.05.2019, 09:33
|
|
Профессор
|
|
Регистрация: 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.
|
|
26.05.2019, 10:11
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,108
|
|
Сообщение от Malleys
|
PREFIX.replace(/'/g, "\\'")
|
зачем replace?
|
|
26.05.2019, 10:25
|
|
Профессор
|
|
Регистрация: 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>
и т. д.
|
|
26.05.2019, 10:34
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,108
|
|
Сообщение от Malleys
|
Ну чтобы было...
|
тогда вопрос, зачем нужен такой префикс? где это применяется?
|
|
26.05.2019, 10:39
|
|
Профессор
|
|
Регистрация: 20.12.2009
Сообщений: 1,714
|
|
Сообщение от рони
|
тогда вопрос, зачем нужен такой префикс? где это применяется?
|
Вот, на 14 строке ведь написано, что находятся все ссылки, которые будут себя вести таким образом (т. е. появляться раз в три раза, говорить «Спасибо»)
Префикс нужен, чтобы отличить от других ссылок, которые так не должны себя вести!
Применяется при поиске элементов, при сохранении списка посещённых ссылок.
|
|
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.
|
|
26.05.2019, 11:03
|
|
Профессор
|
|
Регистрация: 20.12.2009
Сообщений: 1,714
|
|
Сообщение от рони
|
вариант без replace
|
Ок, теперь всё ломается, если в имени префикса есть "!
|
|
26.05.2019, 11:21
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,108
|
|
Malleys,
Сообщение от рони
|
это искуственно созданная проблема
|
|
|
|
|