JQuery плагин рейтинга и кнопка отмены рейтинга - PullRequest
2 голосов
/ 11 октября 2009

Используя этот плагин: http://www.fyneworks.com/jquery/star-rating/#tab-Testing

У меня есть простая функция обратного вызова, которая выбирает идентификатор из переключателей:

<input type="radio" class="auto-submit-star {split:2}" id="myid" value="1" />

$('.auto-submit-star').rating({ 
  callback: function(value, link){ 
   alert($(this).attr('id'));
  } 
});

Это работает нормально, но если пользователь нажимает кнопку отмены, он не может прочитать его идентификатор.

В js, я думаю, кнопка отмены добавляется динамически с помощью:

control.cancel = $('<div class="rating-cancel"><a title="' + control.cancel + '">' + control.cancelValue + '</a></div>')

Если я добавлю к нему идентификатор следующим образом:

control.cancel = $('<div class="rating-cancel"><a id="someid" title="' + control.cancel + '">' + control.cancelValue + '</a></div>')

Как я мог прочитать идентификатор? Это было бы неопределенным. Я могу установить класс и использовать $ ('. Myclass'). Attr ('id'), но у меня будет несколько оценок на одной странице, поэтому мне нужно что-то похожее на "this". Или же кнопка отмены может получить идентификатор соответствующих переключателей?

Ответы [ 4 ]

2 голосов
/ 11 октября 2009

Если id не определено, то вы знаете, что они нажали кнопку отмены. Нет необходимости устанавливать id для него.

if (typeof $(this).attr('id') == 'undefined') {...}
0 голосов
/ 09 декабря 2011

Это ошибка в плагине. Здесь есть исправление .

0 голосов
/ 01 июня 2010

Спасибо, Райан! Я добавил событие click в класс отмены рейтинга, который работал для меня

jQuery(".rating-cancel").click(function() {
        var name = jQuery(this).parent().next().attr('name');
        if (name != "") {
           //added the custom code here to handle rating cancel event
        }
      });
0 голосов
/ 16 ноября 2009

Хорошо, Роджер - я нашел это, потому что столкнулся с той же самой ТОЧНОЙ проблемой. Вот как я решил это пока. Я надеюсь, что плагин будет исправлен в будущем. Я чувствую, что вам не нужно решать проблему на данном этапе, но это может помочь другим людям. Очевидно, что он опирается на структуру элементов DOM, поэтому не очень элегантное решение.

//RYAN OBEROI: A big hack, since the cancel callback does not have the appropriate information
name = $(this).parent().next().attr('name')

// click callback, as requested here: http://plugins.jquery.com/node/1655
if(control.callback) control.callback.apply(input[0], [input.val(), $('a', control.current)[0], name]);// callback event
...