⊗jsPmPrEHT 478 of 505 menu

Szöveg elrejtése elem szerkesztésekor JavaScript nyelven

Most tegyük úgy, hogy szerkesztéskor a beviteli mező magában a bekezdésben jelenjen meg - a bekezdés szövege helyett. Legyen ezután a szerkesztés befejeztekor a beviteli mező eltávolítva, és helyette ismét a bekezdés szövege jelenjen meg.

Lássuk a megvalósítást.

Kezdetként tegyük úgy, hogy a bekezdésre kattintáskor a végéhez hozzáadódik egy beviteli mező a bekezdés szövegével:

let elem = document.querySelector('#elem'); elem.addEventListener('click', function() { let input = document.createElement('input'); input.value = elem.textContent; elem.appendChild(input); });

A kódunk azonban nagyon tökéletlen - minden egyes alkalommal, amikor a bekezdésre kattintunk, új beviteli mező fog hozzáadódni.

Eközben, ha az első beviteli mezőben a bekezdés szövege áll, akkor a második beviteli mezőben már a bekezdés szövege fog állni az első beviteli mezővel együtt, a harmadik beviteli mezőben pedig már a bekezdés szövege fog állni két beviteli mezővel együtt, és így tovább.

Figyeljünk arra is, hogy a hozzáadott beviteli mezőre kattintás a bekezdésre kattintásként értékelődik ki: az történik, hogy a beviteli mező benne van a bekezdésben, és a rá kattintás egyszerűen felbuborékolt ehhez a bekezdéshez.

Ez ahhoz vezet, hogy az első beviteli mező megjelenése után az rá kattintás próbálkozásakor annak érdekében, hogy szerkesztésbe kezdjünk, mi automatikusan kattintást végzünk a bekezdésen minden ebből fakadó következménnyel.

Tehát, a probléma körvonalazva. Most javítsuk ki.

Ehhez egyszerűen a beviteli mező megjelenésekor oldjuk le a kattintás kezelőjét a bekezdésről. Ebben az esetben csak az első kattintás a bekezdésre fog vezetni a beviteli mező megjelenéséhez, a többi kattintás, amely a beviteli mező megjelenése után történik, figyelmen kívül lesz hagyva.

Valósítsuk meg:

let elem = document.querySelector('#elem'); elem.addEventListener('click', function func() { let input = document.createElement('input'); input.value = elem.textContent; elem.appendChild(input); elem.removeEventListener('click', func); // levesszük az eseményt });

Most tegyük úgy, hogy a beviteli mező megjelenésekor, maga a bekezdés szövege eltűnjön. Ehhez a beviteli mező beszúrása előtt a bekezdés textContent értékét adjuk üres sztringnek:

let elem = document.querySelector('#elem'); elem.addEventListener('click', function func() { let input = document.createElement('input'); input.value = elem.textContent; // először a bekezdés szövegét írjuk a beviteli mezőbe elem.textContent = ''; // majd eltávolítjuk a bekezdés szövegét elem.appendChild(input); // majd beillesztjük a beviteli mezőt elem.removeEventListener('click', func); });

Most tegyük úgy, hogy a beviteli mező fókuszvesztésekor a beviteli mező szövege beírásra kerüljön a bekezdésbe:

let elem = document.querySelector('#elem'); elem.addEventListener('click', function func() { let input = document.createElement('input'); input.value = elem.textContent; elem.textContent = ''; elem.appendChild(input); input.addEventListener('blur', function() { elem.textContent = this.value; }); elem.removeEventListener('click', func); });

Figyeljünk arra, hogy nem kell eltávolítanunk a beviteli mezőt - az magától eltávolítja, amikor beírja a saját szövegét a bekezdésbe: mivel a beviteli mező a bekezdés szövegének része, ezért valamilyen szöveg beírása ebbe a bekezdésbe egyszerűen eltávolítja a beviteli mezőnket, és ennyi.

Van azonban még egy problémánk: a bekezdés szövege csak az első alkalommal fog szerkeszthető lenni. Az első szerkesztés után a bekezdés szövegére történő ismételt kattintás nem fog semmihez sem vezetni.

Az történik, hogy a beviteli mező megjelenése pillanatában levettük az eseményt a bekezdésről a fent leírt okok miatt. Most szükséges, hogy a szerkesztés befejezése pillanatában visszaadjuk az eseményt.

Végezzük ezt el:

let elem = document.querySelector('#elem'); elem.addEventListener('click', function func() { let input = document.createElement('input'); input.value = elem.textContent; elem.textContent = ''; elem.appendChild(input); input.addEventListener('blur', function() { elem.textContent = this.value; elem.addEventListener('click', func); // visszaadjuk az eseményt }); elem.removeEventListener('click', func); });

Önállóan, be nem nézve a kódomba, oldja meg az ismertetett feladatot.

Magyar
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
A weboldal működéséhez, elemzéshez és személyre szabáshoz sütiket használunk. Az adatfeldolgozás a Adatvédelmi irányelvek szerint történik.
összes elfogadása beállítás elutasítás