刷新页面后的JavaScript评级

刷新页面后的JavaScript评级,javascript,javascript-events,Javascript,Javascript Events,我有一个java脚本函数来显示评级。。 当用户单击stars进行评分时,我需要显示感谢评分消息;当用户刷新页面时,我需要显示感谢评分消息,而不是对本文进行评分。 下面是我的密码:有人能帮我吗 <script type="text/javascript"> var sMax; // Isthe maximum number of stars var holder; // Is the holding pattern for clicked state var preSet; /

我有一个java脚本函数来显示评级。。 当用户单击stars进行评分时,我需要显示感谢评分消息;当用户刷新页面时,我需要显示感谢评分消息,而不是对本文进行评分。 下面是我的密码:有人能帮我吗

<script type="text/javascript">


var sMax;   // Isthe maximum number of stars
var holder; // Is the holding pattern for clicked state
var preSet; // Is the PreSet value onces a selection has been made
var rated;

// Rollover for image Stars //



function rating(num){
    sMax = 0;   // Isthe maximum number of stars
    for(n=0; n<num.parentNode.childNodes.length; n++){
        if(num.parentNode.childNodes[n].nodeName == "A"){
            sMax++; 
        }
    }

    if(!rated){
        s = num.id.replace("_", ''); // Get the selected star
        a = 0;
        for(i=1; i<=sMax; i++){     
            if(i<=s){
                document.getElementById("_"+i).className = "on";
                document.getElementById("rateStatus").innerHTML = num.title;    
                holder = a+1;
                a++;
            }else{
                document.getElementById("_"+i).className = "";
            }
        }
    }
}

// For when you roll out of the the whole thing //
function off(me){
    if(!rated){
        if(!preSet){    
            for(i=1; i<=sMax; i++){     
                document.getElementById("_"+i).className = "";
                document.getElementById("rateStatus").innerHTML = me.parentNode.title;
            }
        }else{
            rating(preSet);
            document.getElementById("rateStatus").innerHTML = document.getElementById("ratingSaved").innerHTML;
        }
    }
}

// When you actually rate something //
function rateIt(me){
    if(!rated){
        document.getElementById("rateStatus").innerHTML = document.getElementById("ratingSaved").innerHTML + " :: "+me.title;
        preSet = me;
        rated=1;
        sendRate(me);
        rating(me);
    }
}

// Send the rating information somewhere using Ajax or something like that.
function sendRate(sel){
    alert("Your rating was: "+sel.title);
}


</script>





<form id="form1">


<span id="rateStatus">Rate This Article:</span>
<span id="ratingSaved">Thank you for rating.</span> 
<div id="rateMe" title="Rate Me...">
    <a onclick="rateIt(this)" id="_1" title="ehh..." onmouseover="rating(this)" onmouseout="off(this)"></a>
    <a onclick="rateIt(this)" id="_2" title="Not Bad" onmouseover="rating(this)" onmouseout="off(this)"></a>
    <a onclick="rateIt(this)" id="_3" title="Pretty Good" onmouseover="rating(this)" onmouseout="off(this)"></a>
</div>

var sMax;//是恒星的最大数目吗
风险值持有人;//是单击状态的保持模式
变量预置;//是进行选择后的预设值
额定无功功率;
//图像恒星的翻转//
功能等级(num){
sMax=0;//是最大恒星数

对于(n=0;n用户对文章进行评分后,您需要立即保存cookie,并在再次加载页面时检查cookie值,以确认文章是否已加载。

或者,如果您正在刷新页面,您也可以从服务器获取此文章的当前评分。

这里有一些选项,以及您要做的事情这取决于你的要求

最大的问题是永久性。如果我给某个东西打分并收到感谢信息,我是否应该从手机浏览器或另一台电脑的浏览器中查看同一页?否则,这只是一条需要显示一次的信息,你不在乎我以后是否再次看到“请评分”选项

根据您关于在页面刷新之间保存状态的问题,听起来您的需求更倾向于保存永久性

最终,确保评级状态永久保存的唯一方法是将其绑定到后端(服务器)应用程序上的用户帐户中。这样,当我从其他浏览器查看同一页面时,或在很长时间后,服务器可以在数据库中查找并查看“Geuis对此进行评级,显示感谢消息”

如果你只需要在短时间内表示感谢,你可以在memcache这样的临时缓存中存储一个密钥。在每次页面刷新时,一小段javascript可以向缓存服务器发出xhr请求,以检查我是否对页面进行了评级。最终,密钥会从缓存中掉出来,因此可能在我返回时的一小时或一天内o查看页面,然后系统会提示我对页面进行评分。这是一个半永久性的解决方案,但它可以跨任何设备或浏览器工作,只要绑定到帐户中即可

最脆弱但最容易实现的解决方案是纯客户端。在这里,您可以选择a)将额定值/非额定值存储在cookie中,或者b)使用localStorage。在任何一种情况下,它都允许存储状态。但是Cookie和localStorage不会在设备或浏览器之间传输。localStorage不会过期,但最终Cookie会过期。此外,用户最终可以决定清除Cookie和localStorage缓存,并将状态设置回“Rate me”

我不提供任何代码示例,因为我希望您能看到,答案确实首先取决于您在持久性的范围内试图实现什么


只是说,真正没有匿名永久性。也就是说,你不能让一个用户对你的网站保持匿名,却可以在浏览器之间传输他们的投票状态。要做到这一点,你必须有类似于服务器端帐户的东西。

如果你发布HTML并解释问题所在,这会有所帮助…我添加了我的HTML..当用户单击星号进行评级时,我需要显示“感谢您评级”消息,我应该删除评级星号..当用户刷新已评级的页面时,我需要显示“感谢您评级”消息..我开始知道如何显示“感谢您评级”并隐藏评级星号:document.getElementById(“rateme”).innerHTML.style.visibility='hidden';那么前面的答案就足够了。让我与您分享一些cookie处理的参考代码。