⊗jsPmPrEHT 478 of 505 menu

Skrijemo besedilo pri urejanju elementa v JavaScript

Naj naredimo tako, da se med urejanjem vnosno polje prikaže v samem odstavku - namesto besedila tega odstavka. Naj se nato ob koncu urejanja vnosno polje odstrani, namesto njega pa spet prikaže besedilo odstavka.

Loto začnimo z implementacijo.

Za začetek naredimo tako, da ob kliku na odstavek na njegov konec doda vnosno polje z besedilom tega odstavka:

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

Vendar je naša koda zelo nepopolna - ob vsakem kliku na odstavek se mu bo dodalo novo vnosno polje.

Pri tem, če bo v prvem vnosnem polju stal besedilo odstavka, potem bo v drugem vnosnem polju že stalo besedilo odstavka skupaj s prvim vnosnim poljem, v tretjem vnosnem polju pa bo že stalo besedilo odstavka skupaj z dvema vnosnima poljema in tako naprej.

Opozorimo tudi na to, da se klik na dodano vnosno polje šteje kot klik na odstavek: dejstvo je, da se vnosno polje nahaja v odstavku in klik na vnosno polje preprosto odpluje navzgor k temu odstavku.

To bo povzročilo, da se po pojavu prvega vnosnega polja ob poskusu, da nanj kliknemo zato, da začnemo z urejanjem, avtomatično izvede klik na odstavek z vsemi posledicami, ki iz tega izhajajo.

Torej, problem je opisan. Naj ga zdaj popravimo.

Za to preprosto ob pojavu vnosnega polja odvežimo od odstavka obravnavo klikov. V tem primeru bo samo prvi klik na odstavek povzročil pojav vnosnega polja, preostali kliki, narejeni po pojavu vnosnega polja, pa bodo prezrti.

Implementirajmo:

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); // odvežemo dogodek });

Naj zdaj naredimo tako, da ob pojavu vnosnega polja besedilo samega odstavka izgine. Za to pred vstavitvijo vnosnega polja textContent odstavka priredimo prazni niz:

let elem = document.querySelector('#elem'); elem.addEventListener('click', function func() { let input = document.createElement('input'); input.value = elem.textContent; // najprej zapišemo besedilo odstavka v vnosno polje elem.textContent = ''; // nato odstranimo besedilo odstavka elem.appendChild(input); // nato vstavimo vnosno polje elem.removeEventListener('click', func); });

Naj zdaj naredimo tako, da se ob izgubi fokusa v vnosnem polju besedilo tega vnosnega polja zapiše v odstavek:

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); });

Opozorimo na to, da nam ni treba brisati vnosnega polja - ono se izbriše samo, ko zapiše svoje besedilo v odstavek: ker je vnosno polje del besedila odstavka, zapis kakšnega besedila v ta odstavek preprosto izbriše naše vnosno polje, in to je vse.

Imamo pa še eno težavo: besedilo odstavka se bo urejalo le prvič. Po prvem urejanju ponovni pritisk na besedilo odstavka ne bo pripeljal do ničesar.

Dejstvo je, da smo v trenutku pojavljanja vnosnega polja odvezali dogodek od odstavka po zgoraj opisanih razlogih. Zdaj moramo v trenutku konca urejanja dogodek ponovno pripeti.

Naredimo to:

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); // ponovno postavimo dogodek }); elem.removeEventListener('click', func); });

Samostojno, brez zaganjanja v mojo kodo, rešite opisano nalogo.

Slovenščina
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Za delovanje spletnega mesta, analitiko in personalizacijo uporabljamo piškotke. Obdelava podatkov poteka v skladu s Politiko zasebnosti.
sprejmi vse nastavi zavrni