⊗jsPmPrEHT 478 of 505 menu

Ascundem textul la editarea elementului în JavaScript

Să facem acum astfel încât la editare inputul să apară chiar în paragraf - în locul textului acestui paragraf. Să fie apoi la sfârșitul editării inputul să fie eliminat, iar în locul lui să apară din nou textul paragrafului.

Să începem implementarea.

Pentru început, să facem astfel încât la clic pe paragraf să i se adauge un input cu textul acestui paragraf:

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

Codul nostru, totuși, este foarte imperfect - de fiecare dată când se face clic pe paragraf, în el se va adăuga un nou input.

În același timp, dacă în primul input va fi textul paragrafului, atunci în al doilea input va fi deja textul paragrafului împreună cu primul input, iar în al treilea input va fi deja textul paragrafului împreună cu două inputuri și așa mai departe.

Atenție și la faptul că clic pe inputul adăugat va fi considerat ca clic pe paragraf: chestia este că inputul se află în paragraf, iar clic pe input pur și simplu se va propaga în sus către acest paragraf.

Aceasta va duce la faptul că după apariția primului input, la încercarea de a face clic pe el pentru a începe editarea, noi vom face automat clic pe paragraf cu toate consecințele care decurg din aceasta.

Deci, problema este conturată. Să o remediem acum.

Pentru aceasta, pur și simplu la apariția inputului, vom dezlega de la paragraf handler-ul de clic. În acest caz doar primul clic pe paragraf va duce la apariția inputului, iar celelalte clicuri, făcute după apariția inputului, vor fi ignorate.

Să implementăm:

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); // dezlegăm evenimentul });

Să facem acum astfel încât la apariția inputului, textul paragrafului să dispară. Pentru aceasta înainte de inserarea inputului textContent al paragrafului îl vom seta la șir gol:

let elem = document.querySelector('#elem'); elem.addEventListener('click', function func() { let input = document.createElement('input'); input.value = elem.textContent; // mai întâi scriem textul paragrafului în input elem.textContent = ''; // apoi eliminăm textul paragrafului elem.appendChild(input); // apoi inserăm inputul elem.removeEventListener('click', func); });

Să facem acum astfel încât la pierderea focusului în input, textul acestui input să fie scris în paragraf:

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

Atenție la faptul că nu avem nevoie să ștergem inputul - el se șterge singur, când scrie textul său în paragraf: deoarece inputul face parte din textul paragrafului, atunci scrierea unui text în acest paragraf pur și simplu șterge inputul nostru, și gata.

Avem, totuși, încă o problemă: textul paragrafului va fi editat doar prima dată. După prima editare, apăsarea repetată pe textul paragrafului nu va duce la nimic.

Chestia este că în momentul apariției inputului am dezlegat evenimentul de la paragraf din motivele descrise mai sus. Acum este necesar în momentul terminării editării să legăm evenimentul înapoi.

Să facem asta:

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); // atașăm evenimentul înapoi }); elem.removeEventListener('click', func); });

Independent, fără a se uita la codul meu, rezolvați problema descrisă.

Română
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Folosim cookie pentru funcționarea site-ului, analiză și personalizare. Prelucrarea datelor are loc în conformitate cu Politica de confidențialitate.
acceptă toate configurează respinge