2009-10-11 1 views
2

С помощью этого плагина: http://www.fyneworks.com/jquery/star-rating/#tab-TestingJquery рейтинг звезды плагиной и отменить

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

<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'), но у меня будет несколько рейтингов на одной странице, поэтому мне нужно что-то похожее на «это». Или возможно, чтобы кнопка отмены выбрала идентификатор соответствующих переключателей?

ответ

2

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

if (typeof $(this).attr('id') == 'undefined') {...} 
+0

Причина, по которой мне нужно забрать идентификатор, - передать его в мою базу данных. Также будет более одного рейтинга на страницу. Например, если у меня есть 3 рейтинга на одной странице, и пользователь нажимает кнопку отмены во втором рейтинге, мне нужно будет знать, что он был на втором наборе, и мне понадобится этот конкретный идентификатор для вставки в один из моих колонны. Надеюсь, вы понимаете, что я имею в виду. – Roger

0

Ok Roger - Я нашел это, потому что столкнулся с одной и той же проблемой. Вот как я решил это пока. Я надеюсь, что плагин будет исправлен в будущем. Я считаю, что вам не нужна проблема, разрешенная на данный момент, но она может помочь другим людям. Очевидно, что он опирается на структуру элементов 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 
0

Thanks Ryan! Я добавил событие щелчка на рейтинг-отменить класс, который работал для меня

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 
     } 
     });