Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Блок рейтинга для сайта (https://javascript.ru/forum/misc/72319-blok-rejjtinga-dlya-sajjta.html)

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 и т.п., например:
[js]
... ваш код...
[/js]


О том, как вставить в сообщение исполняемый 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
Проблема в том что, как сделать чтобы один пользователь мог только раз поставить рейтинг

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

TheSanches 22.01.2018 18:25

Цитата:

Сообщение от laimas (Сообщение 475908)
Клиентскими скриптами этого сделать нельзя, локальное хранилище для этого не годится.

То есть для выполнения подобных задач нужны знания других языков, я так полагаю Node.js или php? .

Dilettante_Pro 22.01.2018 18:28

TheSanches,
Цитата:

Сообщение от TheSanches
для выполнения подобных задач нужны знания других языков

а также русского - слово Нравится пишется без мягкого знака

laimas 22.01.2018 18:39

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

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


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