刷新页面后的JavaScript评级
我有一个java脚本函数来显示评级。。 当用户单击stars进行评分时,我需要显示感谢评分消息;当用户刷新页面时,我需要显示感谢评分消息,而不是对本文进行评分。 下面是我的密码:有人能帮我吗刷新页面后的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; /
<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处理的参考代码。