Реализация функции jquery $ (document) .live - PullRequest
0 голосов
/ 28 ноября 2011

У меня есть этот кусок кода

$(document).ready(function () {
    $(".rating-stars").ratingbig({
        callback: function (value, link) {
            var element = $(this).parent().parent().parent().attr('id').split("_");
            var tip = $('#rating-result_' + element[1]);
            tip[0].data = value;
            $('#rating-result_' + element[1]).html(ratingMnemos[tip[0].data] || ratingMnemos[0]);
        },
        focus: function (value, link) {
            var element = $(this).parent().parent().parent().attr('id').split("_");
            var tip = $('#rating-result_' + element[1]);
            tip.html(ratingMnemos[value]);
        },
        blur: function (value, link) {
            var element = $(this).parent().parent().parent().attr('id').split("_");
            var tip = $('#rating-result_' + element[1]);
            tip[0].data = value;
            $('#rating-result_' + element[1]).html(ratingMnemos[tip[0].data] || ratingMnemos[0]);
        }
    });
});

И я добавляю код через ajax на страницу. Ну рейтинг не работает на новые добавленные элементы на странице. Я застрял, потому что не могу найти способ вызвать функцию при добавлении новых элементов на страницу.

Заранее спасибо

1 Ответ

1 голос
/ 28 ноября 2011

Я считаю, что ваш вопрос заключался в том, что делать, когда вы добавляете новые элементы с классом rating-stars на страницу после первоначального вызова функции.

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

Пример:

$.ajax({
  // Omitted actual call
  success: function(){
    // Omitted additional callback actions
    applyRatingBig();
  }
});

$(document).ready(function () {
  applyRatingBig();
});

function applyRatingBig() {
// Consider adding code to ensure that this only gets called once per object - for example, you could set a flag once it has been called for a given object

$(".rating-stars").ratingbig({
    callback: function (value, link) {
        var element = $(this).parent().parent().parent().attr('id').split("_");
        var tip = $('#rating-result_' + element[1]);
        tip[0].data = value;
        $('#rating-result_' + element[1]).html(ratingMnemos[tip[0].data] || ratingMnemos[0]);
    },
    focus: function (value, link) {
        var element = $(this).parent().parent().parent().attr('id').split("_");
        var tip = $('#rating-result_' + element[1]);
        tip.html(ratingMnemos[value]);
    },
    blur: function (value, link) {
        var element = $(this).parent().parent().parent().attr('id').split("_");
        var tip = $('#rating-result_' + element[1]);
        tip[0].data = value;
        $('#rating-result_' + element[1]).html(ratingMnemos[tip[0].data] || ratingMnemos[0]);
    }
});
}
...