奇怪的JavaScript类型转换

Weird JavaScript type casting

本文关键字:类型转换 JavaScript      更新时间:2023-09-26

我正在显示特定实体的反馈和评级,该实体最初显示为选项卡。当用户单击选项卡时,我使用

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

问题就在这里。我正在使用这个插件来显示星级。以下是初始化代码

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

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

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

提前致谢

PS:看到答案,我编辑了我的代码

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

当我包含警报时,它正在工作。所以就像我只需要解播放这段代码。如何做到这一点。 });

这是因为在body上设置 rating 属性的代码会延迟到 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')
    });
});​

Matt给出的解决方案应该有效。另一种解决方案可以是,单击选项卡时,您正在从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');
}
}
);

附言我还没有尝试过,但它应该可以;)