0

我有一个显示评分的 java 脚本函数。当用户点击星星评分时,我需要显示感谢评分消息,当用户刷新页面时,我需要显示感谢评分消息而不是评分这篇文章。以下是我的代码:任何人都可以帮助我吗?

<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>
4

3 回答 3

0

或者,如果您仍然要刷新页面,您也可以从服务器获取本文的当前评分

于 2013-01-18T02:13:46.920 回答
0

您需要在用户评价文章后立即保存 cookie,并在再次加载页面时检查该 cookie 值以确认文章是否已加载。

于 2013-01-18T02:07:14.813 回答
0

您在这里有几个选择,您所做的将取决于您的要求。

最大的问题是永久性问题之一。这样,如果我对某项内容进行评分并收到感谢消息,如果我从手机浏览器或另一台计算机上的浏览器查看同一页面,我应该看到吗?否则,它是否只是一条需要显示一次的消息,而您不在乎我以后是否再次看到“请评分”选项?

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

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

如果您只需要在短时间内显示Thank You,您可以将密钥存储在像 memcache 这样的临时缓存中。在每次页面刷新时,一小段 javascript 可以向您的缓存服务器发出 xhr 请求,以检查我是否对页面进行了评分。最终,密钥会从缓存中掉出来,所以可能在一小时或一天后,当我返回查看该页面时,系统会提示我对该页面进行评分。这是一个半永久性的解决方案,但只要绑定到一个帐户,它就可以在任何设备或浏览器上运行。

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

我没有提供任何代码示例,因为我希望您能看到,答案首先在于在永久性范围内试图完成的工作。

顺便说一句,真的没有匿名永久这样的东西。即,您不能让用户匿名访问您的站点,但不能以在浏览器之间传输的方式永久保存他们的投票状态。您必须拥有类似于服务器端帐户的东西才能做到这一点。

于 2013-01-18T03:16:57.690 回答