2011-11-28 53 views
0

我有這樣一段代碼

$(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添加一些代碼的頁面。 nu評級不適用於頁面中新增的元素。我被卡住了,因爲我無法在頁面中添加新元素時找到觸發該函數的方法。

在此先感謝

+1

您是否嘗試過用JavaScript調試器調試您的應用程序類似Firebug,看看你的Ajax調用如何執行? – jsalonen

+0

jQuery.fn.ratingbig做什麼? – Bergi

+0

這聽起來像問題在於,在文檔加載之後,他需要將這個插件應用於其中的一類「rating-stars」添加額外項目。在這種情況下,唯一的解決方案就是在每次添加一個新項目(比如在'.load()'或'.ajax()')的回調中執行它。 –

回答

1

我相信你的問題是,當你最初的函數調用後與類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]); 
    } 
}); 
} 
+0

我已經嘗試過類似David的建議,但由於某種原因無法正常工作。但是,我發現的解決方案(非常簡單)是簡單地將腳本放入一個已經具有點擊委託的函數中,該函數已經具有document.on('click',function((因爲評價函數在創建時隱藏)並且可視化感謝您的幫助,非常高興地看到,仍然有人可以幫助您解決這些「非解決方案」的尷尬時刻, –