사용자가 재평가 할 수있는 별표 평가 시스템을 자바 스크립트로 작성하려고합니다. 나는 일반적으로 매우 자바 스크립트에 새로운 프로그래밍,하지만 여기에 내가 지금까지 무엇을 가지고 다음 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