Плагин рейтинга JQuery - отключить после подачи голосования - PullRequest
5 голосов
/ 23 февраля 2009

Я использую плагин звездной оценки JQuery (v2.61) из http://www.fyneworks.com/jquery/star-rating/. Все идет хорошо, но я хотел бы отключить звезды, когда пользователь проголосовал.

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

(Я думаю, я мог бы перезагрузить div или что-то с помощью JQuery, чтобы показать только для чтения версии звезд, но я надеялся, что есть еще элегантное и простое решение).

Спасибо.

Ответы [ 5 ]

5 голосов
/ 26 февраля 2009

Почему бы не разрешить пользователю обновить свою оценку? Возможно, их первый рейтинг был поспешным, и они хотели бы изменить его, или, может быть, они просто нажали не ту звезду.

Конечно, вам понадобится какой-то способ идентифицировать каждого пользователя и где-то хранить рейтинг каждого пользователя для каждого элемента.

(На самом деле я не знаю, как это сделать, но с точки зрения удобства использования, это кажется более подходящим подходом, чем сначала убедиться, что вы правильно поняли, потому что потом не можете изменить его.) 1007 *

3 голосов
/ 18 марта 2009

Проблема была решена в последней версии плагина. Теперь на обратный вызов вы можете просто сделать:

this.rating('disable');

Yey!

2 голосов
/ 21 марта 2009

Я являюсь автором плагина и только что (буквально) выпустил новую версию (3.1), которая должна решить проблемы, которые вы обсуждали здесь.

@ planetjones, обратите внимание, что this.rating ('отключить'); отличается от this.rating ('readOnly'); this.rating ('readOnly') остановит изменение текущего элемента управления, тогда как this.rating ('disable') предотвратит отправку значения вообще.

@ svinto, Плагин использовался для удаления ящиков с радио, но теперь он их скрывает. чтобы вернуться, все, что вам нужно сделать, это 1. удалить звезды 2. показать радио коробки 3. удалите данные плагина из радиоблоков - $ (). Data ('rating') и $ (). Data ('rating.star') 4. отмените событие 'change' из переключателей

Кстати, об обновлениях здесь будет объявлено: http://twitter.com/fyneworks

2 голосов
/ 23 февраля 2009

Это может быть похоже на ваше решение «перезагрузить div», но я думаю, что лучшим решением может быть простое отключение элементов ввода после выполнения вашего запроса AJAX. Если вы используете jQuery.ajax, вы можете указать функцию обратного вызова, которая будет выполняться после завершения запроса.

jQuery.ajax({
    type: "POST",
    url: ...
    data: ...
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(msg) {
        jQuery('.star').attr('disabled', true);
    },
    error: function(XMLHttpRequest, textStatus, errorThrown) {
        displayError();
    }
});

С их сайта:

Используйте отключенное свойство, чтобы использовать управление только для отображения

<input name="star3" type="radio" class="star" disabled="disabled"/> 
<input name="star3" type="radio" class="star" disabled="disabled"/> 
<input name="star3" type="radio" class="star" disabled="disabled" checked="checked"/> 
<input name="star3" type="radio" class="star" disabled="disabled"/> 
<input name="star3" type="radio" class="star" disabled="disabled"/>
1 голос
/ 23 февраля 2009

Что вам действительно нужно, так это вернуть элементы в переключатели, затем добавить их только для чтения и снова заставить их выглядеть хорошо. Возврат не представляется возможным, но вы можете отменить привязку всех событий в посте к серверу. $ ( "...") отвязать ();.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...