2011-11-28 54 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((因为评价函数在创建时隐藏)并且可视化感谢您的帮助,非常高兴地看到,仍然有人可以帮助您解决这些“非解决方案”的尴尬时刻, –