私はJavaScriptを使用してユーザーの評価を可能にする星評価システムを作成しようとしています。私は、一般的にはかなりJavaScriptに新しいとプログラミングですが、ここで私がこれまで持っているものです:mClickRate()関数で 値でコピーJavascript DOMオブジェクト
<div id="rateMe" title="Rate Me...">
<a><img id="star1" onMouseOver="mOverRate(this);" onMouseOut="mOutRate(this);"
onMouseDown="mClickRate(this);" src="star_empty.png"/></a>
<a ><img id="star2" onMouseOver="mOverRate(this);" onMouseOut="mOutRate(this);"
onMouseDown="mClickRate(this);" src="star_empty.png"/></a>
<a><img id="star3" onMouseOver="mOverRate(this);" onMouseOut="mOutRate(this);"
onMouseDown="mClickRate(this);" src="star_empty.png"/></a>
<a><img id="star4" onMouseOver="mOverRate(this);" onMouseOut="mOutRate(this);"
onMouseDown="mClickRate(this);" src="star_empty.png"/></a>
<a><img id="star5" onMouseOver="mOverRate(this);" onMouseOut="mOutRate(this);"
onMouseDown="mClickRate(this);" src="star_empty.png"/></a>
<label id="info0"></label>
<label id="info1"></label>
<label id="info2"></label>
<label id="info3"></label>
<label id="info4"></label>
</div>
<script type="text/javascript">
var Rated = false;
// Declare an array that holds refers to the star img objects
var aryImg = new Array(document.getElementById("star1"), document.getElementById("star2"),
document.getElementById("star3"), document.getElementById("star4"),
document.getElementById("star5"));
// Decare an array that will be used to store the star rating
// when a user clicks and chooses a rating
aryStoredImg = aryImg;
function mOverRate(that)
{
var myImg = that;
// Changes the star image to filled (and any images to the right
// of it) if the mouse is hovering over it
switch (myImg.id)
{
case "star1":
aryImg[0].src = "star_filled.png";
break;
case "star2":
for (var i = 0; i <= 1; i++)
{
aryImg[i].src = "star_filled.png";
}
break;
case "star3":
for (var i = 0; i <= 2; i++)
{
aryImg[i].src = "star_filled.png";
}
break;
case "star4":
for (var i = 0; i <= 3; i++)
{
aryImg[i].src = "star_filled.png";
}
break;
case "star5":
for (var i = 0; i <= 4; i++)
{
aryImg[i].src = "star_filled.png";
}
break;
}
}
function mClickRate(that)
{
// This attempts to store the state of the imgs
// after the user clicks a star
for (var i = 0; i < aryImg.length; i++)
{
aryStoredImg[i].src = aryImg[i].src;
}
Rated = true;
}
function mOutRate(that)
{
var myImg = that;
if (Rated)
{
// This replaces the images displayed with the
// images that were stored at the time the user
// clicked on a star
for (var i = 0; i < aryImg.length; i++)
{
aryImg[i].src = aryStoredImg[i].src;
}
}
else
{
// This resets all of the images after the mouse
// out event
for (var i = 0; i < aryImg.length; i++)
{
aryImg[i].src = "star_empty.png";
}
}
}
が、私はそう電流源を保存したいです彼が再びクリックしなければ、ユーザーの選択肢を復元するためにmOutRate()関数で呼び出すことができます。しかし、ちょっとした研究(大量の研究で大丈夫)の後、私の新しいアレイは同じリファレンスを指していることがわかりました。
私はarray.spliceを試してみましたが、私もループなしで試してみました。もし誰かが参考の代わりにこのタイプの配列を値でコピーして提供する助けを持っているなら、私のスクリプトをより良くする方法のアドバイスを教えてください。
ああ、私は初心者だと言ったのですか?前もって感謝します。
私はこの問題を解決する方法を研究するのに2日を費やしました。あまりにも難しいと思う話。あなたの答えはとても単純で明白です。ありがとう – yerty
ほとんどすべての種類のプログラミングで、データ(評価値)をユーザーインターフェイス(星の表示方法の詳細)とは別に考えることができますので、いつでもインターフェイスを変更できます保存するデータを変更する必要があります。そのような状況では、そのような考え方があなたを助けます。 – jfriend00
私はそれを念頭に置いておきます。再度ありがとう – yerty