Плагин звездного рейтинга JQuery - отключить после отправки голосования

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

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

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

Спасибо.

Ответов (5)

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

Это может быть похоже на ваше решение «перезагрузить 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();
    }
});

Со своего веб-сайта:

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

<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"/>

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

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

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

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

this.rating('disable');

Ура!

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

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

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

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