⊗jsPmPrEHT 478 of 505 menu

Skryjme text pri úprave prvku v JavaScripte

Teraz urobme tak, aby sa pri úpravách vstupné pole objavilo priamo v odseku - namiesto textu toho odseku. Nech sa potom po ukončení úprav vstupné pole odstráni a namiesto neho sa opäť objaví text odseku.

Poďme na realizáciu.

Na začiatok urobme tak, aby po kliknutí na odsek sa na jeho konci pridalo vstupné pole s textom tohto odseku:

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

Náš kód je však veľmi nedokonalý - každý raz po kliknutí na odsek sa do neho pridá nové vstupné pole.

Prí tom, ak v prvom vstupnom poli bude text odseku, tak v druhom vstupnom poli už bude text odseku spolu s prvým vstupným poľom, a v treťom vstupnom poli už bude text odseku spolu s dvoma vstupnými poľami a tak ďalej.

Všimnite si tiež, že kliknutie na pridané vstupné pole sa bude považovať za kliknutie na odsek: vec sa má tak, že vstupné pole sa nachádza v odseku a kliknutie na vstupné pole jednoducho vystúpi vyššie k tomuto odseku.

To povedie k tomu, že po objavení sa prvého vstupného poľa pri pokuse o kliknutie naň na to, aby sme začali s úpravami, my automaticky vykonáme kliknutie na odsek so všetkými z toho vyplývajúcimi dôsledkami.

Takže, problém je načrtnutý. Poďme teraz ho opraviť.

Na to jednoducho pri objavení sa vstupného poľa odpojíme od odseku obslužný program kliknutia. V tomto prípade iba prvé kliknutie na odsek povedie k objaveniu sa vstupného poľa, a ostatné kliknutia, vykonané po objavení sa vstupného poľa, budú ignorované.

Realizujme:

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); // odpojíme udalosť });

Teraz urobme tak, aby pri objavení sa vstupného poľa, text samotného odseku zmizol. Na to pred vložením vstupného poľa textContent odseku priradíme prázdny reťazec:

let elem = document.querySelector('#elem'); elem.addEventListener('click', function func() { let input = document.createElement('input'); input.value = elem.textContent; // najprv zapíšeme text odseku do vstupného poľa elem.textContent = ''; // potom odstránime text odseku elem.appendChild(input); // potom vložíme vstupné pole elem.removeEventListener('click', func); });

Teraz urobme tak, aby pri strate fokusu vo vstupnom poli sa text tohto vstupného poľa zapísal do odseku:

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

Všimnite si, že my nemusíme odstraňovať vstupné pole - odstraňuje sa samo, keď zapíše svoj text do odseku: tak ako vstupné pole je súčasťou textu odseku, tak zápis nejakého textu do tohto odseku jednoducho odstráni naše vstupné pole, a to je všetko.

My však máme ešte jeden problém: text odseku sa bude upravovať iba prvý raz. Po prvej úprave opakované stlačenie na text odseku k ničomu nepovedie.

Vec sa má tak, že v okamihu objavenia sa vstupného poľa sme odpojili udalosť od odseku z vyššie opísaných dôvodov. Teraz potrebujeme v okamihu ukončenia úprav pripojiť udalosť späť.

Urobme 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); // pripojíme udalosť späť }); elem.removeEventListener('click', func); });

Samostatne, bez nahliadania do môjho kódu, vyriešte opísanú úlohu.

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
Používame cookies na fungovanie stránky, analýzu a personalizáciu. Spracúvanie údajov prebieha v súlade s Politikou ochrany osobných údajov.
prijať všetky nastaviť odmietnuť