[英]How can I select the currently clicked div? and why is my function not being executed?
I want my image to change when a different div is clicked, but the problem is I don't know how to detect which div was clicked, and that my function isn't being executed. 我希望单击不同的div时可以更改图像,但是问题是我不知道如何检测单击了哪个div,并且我的函数没有被执行。 Here is the code, and the W3 editor link :
这是代码,以及W3编辑器链接 :
<!DOCTYPE html>
<html>
<head>
<style>
#profile {
background-image: url("");
background-repeat: no-repeat;
background-size: contain;
background-position: center;
width: 304px;
height: 304px;
box-sizing: border-box;
border: 2px solid white;
-webkit-box-shadow: 10px -7px 106px -28px rgba(0,0,0,0.73);
-moz-box-shadow: 10px -7px 106px -28px rgba(0,0,0,0.73);
box-shadow: 10px -7px 106px -28px rgba(0,0,0,0.73);
transition: all 2s;
margin: 20px;
float: left;
image-rendering: auto;
}
#profile:hover {
//border: 2px solid rgba(101, 124, 226, 0.2);
//transform: rotateY(180deg);
}
#colorPicker {
width: 360px;
height: 300px;
//border: 1px solid grey;
float: left;
margin: 20px 20px 20px 0px;
box-sizing: border-box;
background: rgba(0,0,0,0.0);
-webkit-box-shadow: 10px -7px 106px -28px rgba(0,0,0,0.73);
-moz-box-shadow: 10px -7px 106px -28px rgba(0,0,0,0.73);
box-shadow: 10px -7px 106px -28px rgba(0,0,0,0.73);
}
#colorPicker div {
border: 1px solid black;
}
#colorPicker div:hover {
transform: scale(1.2);
border: 1px solid white;
}
</style>
</head>
<body>
<div id="profile" ><a href=""></a></div>
<div id="colorPicker">
<!--ColourPicker's 30 nested divs will be made with javascript, let's attempt, as we'll need them anyways-->
</div>
<script type="text/javascript">
var link;
var bungie = "https://halo.bungie.net/stats/Halo3/PlayerModel.ashx?";
var race = "0";
race = "p1="+race;
var helmet = "9";
var extraDetails = "&p3=0"+"&p4=0"+"&p5=0";
helmet = "&p2=" + helmet
var colour = "0";
var extraColour = "&p7="+colour+"&p8="+colour;
colour = "&p6="+colour;
link = bungie + race + helmet + extraDetails + colour + extraColour;
document.write(link);
document.getElementById("profile").style.backgroundImage='url(' + link + ')';
//----------------------------------------------------------------------------
var cPicker = new Array(30); //here the color codes will be stored and assigned to each div
var divControl = [];
for (i = 0; i < 30; i++) {//to create the divs to choose the colours for our spartan
/*colour = i;
extraColour = "&p7="+colour+"&p8="+colour;
colour = "&p6="+colour;
link = bungie + race + helmet + extraDetails + colour + extraColour;
document.write(link);
document.write('<br/>'); document.write('<br/>');*/
var divColour = document.createElement("div");
divColour.style.width = "16.38%";
divColour.style.height = "20%";
divColour.style.marginRight = "1px";
divColour.style.marginBottom = "1px";
divColour.style.backgroundColor = "red";//we have to get the color from the pictures, from the loaded links
divColour.style.boxSizing = "border-box";
//divColour.style.border = "1px solid black";
divColour.style.cssFloat = "left";
divColour.style.color = "white";
divControl[i] = document.getElementById("colorPicker").appendChild(divColour);
cPicker[i] = i;
}
function divHover(event) {
/*function myFunction(event) {
var x = event.target;
document.getElementById("demo").innerHTML = "Triggered by a " + x.tagName + " element";
}*/
var linkHover;
var currentDiv = event.target;
alert(currentDiv);
for (i = 0; i < 30; i++) {
if (currentDiv.tagName == document.getElementById("colorPicker").getElementByTagName("div")[i]) {
colour = i;
extraColour = "&p7="+colour+"&p8="+colour;
colour = "&p6="+colour;
linkHover = bungie + race + helmet + extraDetails + colour + extraColour;
//document.getElementById("profile").style.backgroundImage='url(' + linkHover + ')';
document.write(linkHover);
} else { };
}
//var x = event.clientX, y = event.clientY,
//elementMouseIsOver = document.elementFromPoint(x, y);
}
document.getElementById("colorPicker").getElementByTagName("div").onclick = divHover(event);
divControl[0].onclick = divHover;
//document.write(cPicker); //now we can link the individual div's with the links if we ever need to
</script>
</body>
</html>
It's in the if statement that I can't do the test, in the divHover(event) function, I'm new to javascript, and I don't really get why it's not working or returning what I want. 在ifH语句中,我无法进行测试,在divHover(event)函数中,我是javascript的新手,我真的不明白为什么它无法正常工作或返回我想要的东西。 Cheers
干杯
Try this. 尝试这个。 I gave every box a unique id in this example.
在此示例中,我为每个框指定了唯一的ID。 the end result is output of
document.write
(output of the divHover
function) 最终结果是
document.write
输出( divHover
函数的输出)
var link; var bungie = "https://halo.bungie.net/stats/Halo3/PlayerModel.ashx?"; var race = "0"; race = "p1="+race; var helmet = "9"; var extraDetails = "&p3=0"+"&p4=0"+"&p5=0"; helmet = "&p2=" + helmet var colour = "0"; var extraColour = "&p7="+colour+"&p8="+colour; colour = "&p6="+colour; link = bungie + race + helmet + extraDetails + colour + extraColour; document.write(link); document.getElementById("profile").style.backgroundImage='url(' + link + ')'; //---------------------------------------------------------------------------- var cPicker = new Array(30); //here the color codes will be stored and assigned to each div var divControl = []; for (i = 0; i < 30; i++) {//to create the divs to choose the colours for our spartan /*colour = i; extraColour = "&p7="+colour+"&p8="+colour; colour = "&p6="+colour; link = bungie + race + helmet + extraDetails + colour + extraColour; document.write(link); document.write('<br/>'); document.write('<br/>');*/ var divColour = document.createElement("div"); divColour.style.width = "16.38%"; divColour.style.height = "20%"; divColour.style.marginRight = "1px"; divColour.style.marginBottom = "1px"; divColour.style.backgroundColor = "red";//we have to get the color from the pictures, from the loaded links divColour.style.boxSizing = "border-box"; //divColour.style.border = "1px solid black"; divColour.style.cssFloat = "left"; divColour.style.color = "white"; divColour.id = "halo"+i; divControl[i] = document.getElementById("colorPicker").appendChild(divColour); cPicker[i] = i; } function divHover(event) { /*function myFunction(event) { var x = event.target; document.getElementById("demo").innerHTML = "Triggered by a " + x.tagName + " element"; }*/ var linkHover; var currentDiv = event.target; for (i = 0; i < 30; i++) { var checkId = "halo"+i; if (currentDiv.id == checkId) { colour = i; extraColour = "&p7="+colour+"&p8="+colour; colour = "&p6="+colour; linkHover = bungie + race + helmet + extraDetails + colour + extraColour; //document.getElementById("profile").style.backgroundImage='url(' + linkHover + ')'; document.write(linkHover); } else { }; } //var x = event.clientX, y = event.clientY, //elementMouseIsOver = document.elementFromPoint(x, y); } document.getElementById("colorPicker").addEventListener("click",divHover); //document.write(cPicker); //now we can link the individual div's with the links if we ever need to
#profile { background-image: url(""); background-repeat: no-repeat; background-size: contain; background-position: center; width: 304px; height: 304px; box-sizing: border-box; border: 2px solid white; -webkit-box-shadow: 10px -7px 106px -28px rgba(0,0,0,0.73); -moz-box-shadow: 10px -7px 106px -28px rgba(0,0,0,0.73); box-shadow: 10px -7px 106px -28px rgba(0,0,0,0.73); transition: all 2s; margin: 20px; float: left; image-rendering: auto; } #profile:hover { //border: 2px solid rgba(101, 124, 226, 0.2); //transform: rotateY(180deg); } #colorPicker { width: 360px; height: 300px; //border: 1px solid grey; float: left; margin: 20px 20px 20px 0px; box-sizing: border-box; background: rgba(0,0,0,0.0); -webkit-box-shadow: 10px -7px 106px -28px rgba(0,0,0,0.73); -moz-box-shadow: 10px -7px 106px -28px rgba(0,0,0,0.73); box-shadow: 10px -7px 106px -28px rgba(0,0,0,0.73); } #colorPicker div { border: 1px solid black; } #colorPicker div:hover { transform: scale(1.2); border: 1px solid white; }
<div id="profile" ><a href=""></a></div> <div id="colorPicker"> <!--ColourPicker's 30 nested divs will be made with javascript, let's attempt, as we'll need them anyways--> </div>
Some issues: 一些问题:
document.write
for debugging, but console.log
document.write
进行调试,而要使用console.log
getElementByTagName
: it should have an s
after Element
. getElementByTagName
的错误:在Element
之后应该有一个s
。 You have this mistake at two places. getElementsByTagName
, does not have an onclick
property, so that can't work. getElementsByTagName
返回的节点列表没有onclick
属性,因此无法正常工作。 Instead define the click handler on the parent element and then check which child was clicked in the handler itself onclick
, but instead called the handler. onclick
分配函数引用,而是将其称为处理程序。 That is wrong. .tagName
property is weird: on the left side of the comparison you'd have a string like 'DIV' every time, while on the right side you would have a DOM element (if the spelling was corrected). .tagName
属性的比较很奇怪:在比较的左侧,每次都有一个像'DIV'这样的字符串,而在右侧,则有一个DOM元素(如果拼写正确)。 This of course is never equal. var i = [].indexOf.call(currentDiv.parentNode.children, currentDiv);
var i = [].indexOf.call(currentDiv.parentNode.children, currentDiv);
Here is some corrected code: 这是一些更正的代码:
var race = "0", helmet = "9", colour = "0";
function buildLink(race, helmet, colour) {
return "https://halo.bungie.net/stats/Halo3/PlayerModel.ashx?" +
"p1=" + race +
"&p2=" + helmet +
"&p3=0" + "&p4=0" + "&p5=0" +
"&p6=" + colour + "&p7=" + colour + "&p8=" + colour;
}
var link = buildLink(race, helmet, colour);
console.log(link);
document.getElementById("profile").style.backgroundImage = 'url(' + link + ')';
//----------------------------------------------------------------------------
var cPicker = new Array(30); //here the color codes will be stored and assigned to each div
var divControl = [];
for (var i = 0; i < 30; i++) {//to create the divs to choose the colours for our spartan
var divColour = document.createElement("div");
divColour.style.width = "16.38%";
divColour.style.height = "20%";
divColour.style.marginRight = "1px";
divColour.style.marginBottom = "1px";
divColour.style.backgroundColor = "red";
divColour.style.boxSizing = "border-box";
divColour.style.cssFloat = "left";
divColour.style.color = "white";
divControl[i] = document.getElementById("colorPicker").appendChild(divColour);
cPicker[i] = i;
}
function divHover(event) {
var currentDiv = event.target;
var colour = [].indexOf.call(currentDiv.parentNode.children, currentDiv);
var linkHover = buildLink(race, helmet, colour);
console.log(linkHover);
}
document.getElementById("colorPicker").onclick = divHover;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.