Вход

Просмотр полной версии : Блок рейтинга для сайта


TheSanches
21.01.2018, 18:24
Доброго времени суток, пытаюсь написать скрипт, который должен выводить рейтинг статьи, то-есть пользователь кликает по кнопке и рейтинг статьи возрастает на +1, только начал изучать JS, вот что удалось написать...


<div id="com">
<button id="com-check">Нравиться</button>
<div id="com-out"></div>
</div>


let comNum = 0;
document.getElementById('com-check').onclick = function(){
let comOut = document.getElementById('com-out');
comOut.innerHTML = comNum;
localStorage.setItem('coment', comNum);
comNum++;
}

let storCom = localStorage.getItem('coment');
document.getElementById('com-out').innerHTML = storCom;

Проблема в том что, как сделать чтобы один пользователь мог только раз поставить рейтинг, и второе, после перезагрузки страницы рейтинг сохраняется, но при клике обнуляется счетчик и начинается все с нуля.
Спасибо...

рони
21.01.2018, 19:06
TheSanches,
Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:


... ваш код...



О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.

рони
21.01.2018, 19:06
TheSanches,
<!DOCTYPE html>

<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<script>
window.addEventListener("DOMContentLoaded", function() {
var comNum = localStorage.getItem("coment"),
but = document.querySelector("#com-check"),
out = document.querySelector("#com-out");
if (!comNum) {
comNum = 0;
but.addEventListener("click", function rating() {
comNum++;
localStorage.setItem("coment", comNum);
out.innerHTML = comNum;
but.removeEventListener("click", rating);
});
}
out.innerHTML = comNum;
});
</script>
</head>

<body>
<div id="com">
<button id="com-check">Нравиться</button>
<div id="com-out"></div>
</div>

</body>
</html>

TheSanches
21.01.2018, 20:49
Спасибо

laimas
22.01.2018, 04:54
Проблема в том что, как сделать чтобы один пользователь мог только раз поставить рейтинг

Клиентскими скриптами этого сделать нельзя, локальное хранилище для этого не годится.

TheSanches
22.01.2018, 18:25
Клиентскими скриптами этого сделать нельзя, локальное хранилище для этого не годится.
То есть для выполнения подобных задач нужны знания других языков, я так полагаю Node.js или php? .

Dilettante_Pro
22.01.2018, 18:28
TheSanches,
для выполнения подобных задач нужны знания других языков
а также русского - слово Нравится пишется без мягкого знака

laimas
22.01.2018, 18:39
TheSanches,
серверных языков много, какой выбрать, это вопрос "доходчивости и понимания" языка, это не мне решать. Просто проверки подобные этой должны выполняться сервером и разрешения должен выдавать он. Все что на клиенте легко подделать или обойти.

Голосование обычно разрешено регистрированным пользователям, что облегчает задачу серверу. В противном случае нужно решать непростую задачу - однозначного определения уникальности любого пользователя.