2015-02-12 3 views
1

У меня есть RateIt jQuery Plugin, работающий над приложением Django. Я использую Ajax для захвата значений и отправки их на сервер и обновления значений на странице.Lock Star Rating System После голосования пользователя - RateIt плагин jQuery

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

Но с точки зрения удобства использования, я думаю, что позволяя пользователю устанавливать рейтинг один раз, два раза или, в моем случае, 5 раз кажется лучшим способом. Я использую что-то из докторов, что почти делает то, что я хочу:

$(ri).rateit('readonly', !$(ri).rateit('readonly')); 

я сталкиваюсь счетчик в сценарии (например, counter++;) и внутри if заявление, я принялся readonly. Проблема в том, что пользователь снова нажимает на звезды, он переключает режим write (не readonly).

Каждый щелчок после этого просто переключает режим readonly.

UPDATE

С помощью @Gidon (создатель RateIt, я считаю), я решил эту проблему. Вот бит в сценарии Ajax. Я начал счетчик вне вызова Ajax с counter = 0;, а затем итеративно его counter++; и использовал для теста:

if (counter >= 3) { 
    $(ri).rateit('readonly', true); 
    $('.rateit').off('click'); 
} 

Я положил его в режим readonly и удаляется щелчок связывания с JQuery-х off().

Спасибо за помощь @Gidon. Это работает нормально. Пользователь может обновить страницу и получить больше голосов, но у меня есть некоторые идеи об использовании сеансов, чтобы предотвратить это ...

ответ

2

Переключатель из-за этой части: !$(ri).rateit('readonly'). Это сборка из двух частей ! и $(ri).rateit('readonly'). Восклицательный знак (!) является логическим не оператор, и сводит на нет все, что приходит после него ($(ri).rateit('readonly').

Так он говорит, принять текущее значение только для чтения собственности, и перевернуть его, таким образом, создавая эффект переключения.

То, что вы хотите сделать, это:

$(ri).rateit('readonly', true);

Что заставляет его в режиме только для чтения

+0

Geez, теперь я чувствую, как манекен ;-) Thank. s для достижения, BTW. Я очень ценю это. Клянусь, я пробовал это и другие подходы, такие как '$ ('. Rateit'). Attr ('data-rateit-readonly', 'true');' бесполезно. Может быть, я попробовал нечто подобное ... Во всяком случае, еще раз спасибо. отличный плагин! – nicorellius

+0

О да, еще один быстрый вопрос. Я выполнил ваши рекомендации, и это сработало. Но у меня все еще есть затяжная проблема, так что звезды (в режиме «readonly») все еще используют клики. Они замаскированы переключателями, верно? Должен ли я отключать их тоже? Я ожидаю, что Ajax на событие click (чтобы отправить данные на сервер), возможно, это моя проблема. – nicorellius

+0

Он может использовать радиокнопки, элемент диапазона или элемент выбора.Но основное использование (которое ищет div/span с классом rateit) не использует ничего в маскировке. Посмотрев qat на ваше обновление ответа, вы добавляете свой собственный прослушиватель событий к его компоненту, однако вы можете использовать сборку в событиях, которые занимаются только чтением. '$ ('. rateit'). on ('rated', ....)' – Gidon

Смежные вопросы