![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 66 Pomógł: 1 Dołączył: 4.05.2019 Skąd: PHP5.6 Ostrzeżenie: (0%) ![]() ![]() |
jQuery jest trudniejsze i bardziej skomplikowane niż się wydawało, a wydawało się naprawdę trudne... (IMG:style_emoticons/default/ohno-smiley.gif)
Pomijam fakt, że w sieci brak zgrabnego gotowca (jQuery, AJAX, PHP5.6) najprostszego systemu głosowania +/- 1 dla np. komentarza. (albo nie umiem szukać) Na podstawie kilkunastu różnych kodów z Internetu zlepiłem jeden funkcjonalny skrypt, który (po kliknięciu) ma za zadanie: 1. przyznać ocenę +1 (tj. zwiększyć zawczasu, sztucznie licznik aktualnej oceny +1) a) wysłać ID_komentarza z rodzajem_oceny(+/-) do PHP i tam po weryfikacji zrobić Update SQL (po stronie PHP brak problemów) 2. sformatować kolorystycznie kliknięty button "plus" oraz usunąć możliwość kliknięcia w button "minus" za pomocą display:none; 3. wrzucić ocenionego komentarza (tj. ID_komentarza) do localStorage, żeby user wiedział co już ocenił. 4. sprawdzić ID_komentarza z localStorage i jeśli istnieje, to sformatować kolorystycznie na stałe. (tj. do czasu usunięcia pamięci lokalnej www) Generalnie wszystko działa dla jednego komentarza. Siedziałem nad tym dwa dni i jestem pewny, że można to zrobić znacznie lepiej, ale składnia i jej logika mnie dobija więc będę wdzięczny za naprowadzenie w jaki sposób edytować kod, aby wrzucić w jakąś (IMG:style_emoticons/default/brzydal.gif) pętle, która automatycznie pobiera i sprawdza (tj. formatuje jeśli oceniono) wszystkie wyświetlone komentarze (tj. ID_komentarza).
|
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 859 Pomógł: 177 Dołączył: 29.10.2009 Ostrzeżenie: (0%) ![]() ![]() |
Cześć,
ja bym zrobił coś takiego: https://jsfiddle.net/nh584c7f/
Kod $(document).ready(function() { //$('[data-element="comment"]:not(.commented) [data-action]') - coś mi ten not nie działa stąd IF niżej $('[data-element="comment"] [data-action]').off('click').on('click', function(commentEvent) { commentEvent.preventDefault(); let currentComment = $(this).closest('[data-element="comment"]'); if (!currentComment.hasClass('commented')) { let action = $(this).attr('data-action'); //tutaj tymczosow zmieniamy liczbę ocen currentComment.find('input').val(parseInt(currentComment.find('input').val()) + (('up' === action) ? 1 : -1)); currentComment.addClass('commented').addClass('commented__'+action); $.ajax({ type: "POST", url: "https://httpbin.org/post", data: { id_koment: currentComment.attr('data-comment-id'), rodzaj: action, csrf: 'test' } }).done(function(data) { //zatwierdzamy liczbę ocen z danymi z backendu //currentComment.find('input').val(data); addCommentToLocalStorage(currentComment.attr('data-comment-id'), action); }); } }); }); if (getCommentFromLocalStorage()) { $.each(getCommentFromLocalStorage(), function(index, comment) { $('[data-element="comment"][data-comment-id="'+comment.commentId+'"]') .addClass('commented') .addClass('commented__'+comment.action); }); } function getCommentFromLocalStorage() { return JSON.parse(localStorage.getItem("id_koment")); } function addCommentToLocalStorage(commentId, action) { let comments = getCommentFromLocalStorage(); if (comments === null) { comments = [{'action': action, 'commentId': commentId}]; } else if (!comments.includes(commentId)) { comments.push({'action': action, 'commentId': commentId}); } localStorage.setItem("id_koment", JSON.stringify(comments)); } Pozdrawiam Ten post edytował aras785 6.05.2022, 23:30:52 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 17.10.2025 - 18:54 |