奇怪的JavaScript类型转换

时间:2012-04-25 10:20:53

标签: javascript jquery jquery-plugins rating raty

我正在显示特定实体的反馈和评级,最初显示为标签。当用户点击标签时,我会使用

获得反馈和评分
$.get()

$.get()的回归就像这样

some arbit html|||8

这个数据我正在使用|||进行拆分,并在这种情况下获得8的评级。

        $.get('prevfeed.php',{text:text},function(data){
         data = data.split("|||");

        $('#prevFeedback').html(data[0]);
        $('body').data( 'rating', parseInt(data[1]));
        alert(parseInt(data[1])+1);
    });

问题出在这里。我使用此plugin来显示星级评分。以下是初始化代码

        $('#star').raty({
        readOnly: true,
        number : 10,
        start:   $('body').data( 'rating')
    }); 

无论我做什么评级都不起作用。如果我输入一个数字而不是$('body').data( 'rating'),它的工作正常。

最初我尝试使用$('body').data( 'rating')设置隐藏输入字段的值,然后使用输入字段的val指定start。但这没用。

提前致谢

P.S :看到答案我编辑了我的代码

        $('#star').raty({
            readOnly: true,
            number: 10,
            start: function() { alert($('body').data('rating'););return $('body').data('rating'); }

当我加入提醒时,它正在运行。所以就像我只需要显示这段代码一样。这该怎么做。             });

2 个答案:

答案 0 :(得分:4)

这是因为在rating上设置body属性的代码会延迟,直到AJAX调用完成。

但是,您将在页面加载时启动raty插件; rating数据属性仍为undefined的位置。

您必须延迟插件的初始化,直到AJAX调用完成:

$.get('prevfeed.php', {
    text: text
}, function(data) {
    data = data.split("|||");

    $('#prevFeedback').html(data[0]);
    $('body').data('rating', parseInt(data[1]));

    $('#star').raty({
        readOnly: true,
        number: 10,
        start: $('body').data('rating')
    });
});​

答案 1 :(得分:0)

马特给出的解决方案应该有效。另一种解决方案是,在现在点击标签时,您将从prevfeed.php获取数据并尝试相应地设置评级。

您可以尝试这样做。

点击标签:

$("#star").raty ( {
readonly: true,
number: 10,
start: function (){
//get the rating now,
$.get('prevfeed.php',{text:text},function(data){
        data = data.split("|||");

        $('#prevFeedback').html(data[0]);
        $('body').data( 'rating', parseInt(data[1]));
    });
//Now you got the rating, just return it
return $('body').data('rating');
}
}
);

P.S。我没试过,但它应该有效;)