Kezdőoldal » Számítástechnika » Programozás » Mi a hiba a kódban?

Mi a hiba a kódban?

Figyelt kérdés

Azt szerettem volna elérni, hogy ha egy elemre rákattintunk, akkor az egyik div-ből (box1) kerüljön át a másik div-be (box2), illetve, ha már a box2-ben van, akkor vissza a box1-be.


Az az érdekes, hogy ha nem class-t adok meg az elemnek, hanem id-t, akkor tökéletesen működik. Pedig szerintem jól jártam körül a tömböt.


A konzol nem ír ki hibát. :(


<!DOCTYPE html>

<html>

<head>

<title></title>

<style type="text/css">

#box1 {

width: 100px;

height: 200px;

border: 3px solid black;

margin-bottom: 10px;

}

#box2 {

width: 100px;

height: 200px;

border: 3px solid black;

}

.elemek {

position: relative;

top: 50%;

left: 50%;

background-color: red;

width: 50px;

height: 150px;

transform: translate(-50%, -50%);

}

</style>

</head>

<body>

<div id="box1">

<div class="elemek"></div>

</div>

<div id="box2">


</div>

<script type="text/javascript">

var box1 = document.getElementById("box1");

var elemek = document.getElementsByClassName("elemek");

var i;

var box2 = document.getElementById("box2");

for (var i = 0; i < elemek.length; i++) {

elemek[i].onclick = function() {

if (box1.contains(elemek[i]) == false) {

box2.appendChild(this);

}

else {

box2.appendChild(this);

}

}

}

</script>

</body>

</html>


Köszi a segítséget!



2018. júl. 23. 22:34
 1/7 A kérdező kommentje:

UPDATE! :D


Rájöttem, hogy az else ágban is a box2-be akartam küldeni az elemet, viszont ha átírom box1-re, akkor sem történik semmi, szóval a hiba ugyanúgy fent áll. :(

2018. júl. 23. 22:37
 2/7 anonim ***** válasza:

A for ciklusban minden elemre hozzáadod az eseménykezelőt, ez eddig oké.


Lefut a hozzáadás, az i értéke 1 lesz.


Rányomsz a cuccra és a következő sorban:

if (box1.contains(elemek[i]) == false) {

az elemek[i], azaz elemek[1] undefined, hiszen csak 1 ele van (0. index létezik csak)


Visznot számomra picit érthetetlen, ha utána this-ként hivatkozol rá, a feltételben mért nem ugyanezt teszed? Ez megoldaná a problémát:

if (box1.contains(this) == false) {



És ekkor a "then" ágban kell a box2, az else-ben a box1, nem úgy ahogy az első kommentedben írtad.

2018. júl. 23. 22:58
Hasznos számodra ez a válasz?
 3/7 anonim ***** válasza:

Bocs, helyesen:

És ekkor a "then" ágban kell a box1, az else-ben a box2, nem úgy ahogy az első kommentedben írtad.


Hisz te azt írtad, hogy az else ágat írod át box1-re.


Amúgy pedig felesleges az == false, és akkor mehet az else-be a box1:)

2018. júl. 23. 23:01
Hasznos számodra ez a válasz?
 4/7 A kérdező kommentje:
Megvan! Köszi szépen! :D
2018. júl. 23. 23:57
 5/7 anonim ***** válasza:

Kicsit optimalizálva:

[link]

[link]


* A külső dobozok CSS-definícióit egyesítettem

* Inkább a belső dobozra (amiből egy van, ezért azonosítóval hivatkozunk rá) való rákattintásakor megyünk végig a külső dobozokon (amikből több van, ezért osztálynévvel hivatkozunk rájuk), és ellenőrizzük, hogy tartalmazzák-e azt. Ha igen, akkor a belső dobozt arréb rakjuk a következő külső dobozba.

2018. júl. 24. 01:30
Hasznos számodra ez a válasz?
 6/7 A kérdező kommentje:
Köszönöm az erre fordított időt, de az én elképzeléseim szerint a külső dobozokból minden esetben csak kettő lesz, a belsőből viszont akármennyi lehet, ezért volt szükség a class-os megoldásra. 😀
2018. júl. 24. 08:00
 7/7 anonim ***** válasza:

"de az én elképzeléseim szerint a külső dobozokból minden esetben csak kettő lesz, a belsőből viszont akármennyi lehet"

A topiknyitó hozzászólásodban szereplő példában csak egy belső, és több külső dobozról esik szó.


De ha mindenből - külső és belső dobozból is - több van, újabb példa:

[link]

[link]

2018. júl. 24. 15:49
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!