Intereting Posts
PHP: как получить URL-адрес относительного файла Как переписать URL-адрес в php, используя файл htaccess. какое изменение в php-коде Как изменить размер и преобразовать загруженное изображение в PNG с помощью GD? Как создать динамические / дружественные URL-адреса с помощью PHP? Есть ли разница в скорости между <? Php echo $ var; ?> и <? = $ var?>? PHP json расшифровывается из базы данных Откройте страницу iframe в своем родителе, когда прямая ссылка относится к одной из дочерних страниц как я могу получить информацию о БД из wp-config.php с помощью файла () PHP синтаксис для включения пути файла $ _SERVER в jquery ajax url? Как отправить форму с помощью AJAX / JSON? Поиск IP-адреса клиента, подключенного через прокси-сервер Автоматическое обновление времени в PHP с помощью Ajax Возможно ли, что REMOTE_ADDR может быть пустым? Лучший способ случайного выбора пары ключей и значений из массива в PHP Рамка Yii: управление доступом на основе ролей

Система голосования jQuery

Поэтому я создаю систему голосования, в основном систему голосования Thumbs Up & Thumbs Down. Я использую CakePHP и jQuery с MySQL, но хочу убедиться, что внешний интерфейс верен, и это лучший способ сделать это.

Я хочу, чтобы пользователь мог изменить свой голос, поэтому использование jQuery – это лучший и самый эффективный способ? Я довольно новичок в jQuery, когда дело доходит до манипуляции с классом.

поле ID будет уникальным идентификатором фотографии, на которую будут голосовать пользователи. Это, конечно, просто тест, и это не будет конечным продуктом в производстве. На странице будет много фотографий, и пользователь будет проголосовать «Вверх» или «Вниз» для каждого из них.

Вот код.

<?php echo $javascript->link('jquery/jquery-1.4.2.min',false); ?> <script type="text/javascript"> $(document).ready(function() { $('.vote').click(function () { if ($(this).hasClass("current")) { alert("You have already voted for this option!"); return; } var parentId = $(this).parent("div").attr("id"); if ($(this).hasClass("up")) { //Do backend query and checking here alert("Voted Up!"); $(this).toggleClass("current"); if ($("#" + parentId + "-down").hasClass("current")) { $("#" + parentId + "-down").toggleClass("current"); } } else if($(this).hasClass("down")) { //Do backend query and checking here alert("Voted Down!"); $(this).toggleClass("current"); if ($("#" + parentId + "-up").hasClass("current")) { $("#" + parentId + "-up").toggleClass("current"); } } }); }); </script> <div id="1234"> <a id="1234-up" class="vote up" >+</a> | <a id="1234-down" class="vote down" >-</a> </div> 

Вы можете сделать это так:

 <script type="text/javascript"> $(document).ready(function() { $('.vote').click(function () { if ($(this).hasClass("current")) { alert("You have already voted for this option!"); } else { var parentId = $(this).parent("div").attr("id"); var error = false; if ($(this).hasClass("up")) { //Do backend query and checking here (SET: error) alert("Voted Up!"); } else if($(this).hasClass("down")) { //Do backend query and checking here (SET: error) alert("Voted Down!"); } //removes all the votes $(this).parent("div").children().removeClass("current"); if(!error) { $(this).addClass("current"); } else { alert("There was an error"); } } return false; }); }); </script> <div id="1234"> <a class="vote up" href="#">+</a> | <a class="vote down" href="#">-</a> </div> 

Это устраняет необходимость в дополнительных html-идентификаторах, и вам не нужен двойной код для добавления текущего класса. Я не уверен, что быстрее, но я думаю, что этот способ позволит улучшить обслуживание кода.

Да, jQuery – лучшее решение для этого, но я не уверен, что вы можете больше оптимизировать свой код.

Вы можете использовать это: http://www.technabled.com/2011/02/pulse-lite-reddit-ajax-up-down-voting.html. Раскрытие информации: Я разработчик.