• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Błędny kod addEventListener

+1 głos
995 wizyt
pytanie zadane 6 czerwca 2021 w JavaScript przez Nearr Obywatel (1,890 p.)
const feed = document.querySelector( 'feed' );

feed.addEventListener( 'keydown', ( e ) => {
	evt.preventDefault();
	
	if (e.key.length == 1 && e.key != ' ') {
		feed.value == e.key;
	}
});

Witam, nie mogę dojść do błedu.

komentarz 6 czerwca 2021 przez SzkolnyAdmin Szeryf (90,270 p.)

@Nearr,

i prawidłowo - domyślnym działaniem jest wpisanie znaku w polu tekstowym. Zablokowałeś to przecież.

komentarz 6 czerwca 2021 przez SzkolnyAdmin Szeryf (90,270 p.)

  @CubeStorm, napisał wyżej.

komentarz 6 czerwca 2021 przez Nearr Obywatel (1,890 p.)

 

            <div class="controls-input-section" id="feed-section">
              <span class="input-text">Feed</span>
              <input type="text" id="feed" class="controls-text-fields" maxlength="1" style="caret-color: transparent">  
            </div>
const feed = document.querySelector('#feed');

feed.addEventListener('keydown', (e) => {
	evt.preventDefault();
	
	if (e.key.length == 1 && e.key != ' ') {
		feed.value == e.key;
	}
});

cel i zamiar czego? Jeśli chodzi i cel kodu, to podałem go wyżej 

2
komentarz 6 czerwca 2021 przez ScriptyChris Mędrzec (190,190 p.)

Najlepszym rozwiązaniem jest używanie tagów <script> .... </script> (lub <script src"..."></script>) tuż przed znakiem </body>.

@CubeStorm, nie bardzo. Są lepsze rozwiązania, takie jak użycie atrybutu async lub defer, albo umieszczenie skryptu obok <link>a z atrybutem prefetch lub preload. Można też sam kod skryptu owinąć w funkcję wywoływaną na zdarzenie DOMContentLoaded lub Load.

komentarz 6 czerwca 2021 przez CubeStorm Pasjonat (15,020 p.)
Racja, dawno z nich nie korzystałem i wyleciały mi z głowy.

2 odpowiedzi

0 głosów
odpowiedź 6 czerwca 2021 przez CubeStorm Pasjonat (15,020 p.)
wybrane 7 czerwca 2021 przez Nearr
 
Najlepsza

Tutaj moja wersja:

https://codepen.io/CubeStorm/pen/yLMjmoR

 

Błąd był tutaj:

feed.value == e.key;

porównywałeś zamiast nadawać wartość.

komentarz 6 czerwca 2021 przez SzkolnyAdmin Szeryf (90,270 p.)
Nic się nie dzieje - nie ma zmiany litery.
komentarz 6 czerwca 2021 przez CubeStorm Pasjonat (15,020 p.)
Mój błąd, już jest poprawnie.
komentarz 6 czerwca 2021 przez Nearr Obywatel (1,890 p.)
nie ważne działa, dziękuję
0 głosów
odpowiedź 11 czerwca 2021 przez VBService Ekspert (256,600 p.)
edycja 11 czerwca 2021 przez VBService

Ten zapis

const feed = document.querySelector('#feed');
 
feed.addEventListener('keydown', e => {
    if (feed.value.length >= 1) {
        feed.value = e.key;
    }
});

 

powoduje "pojawianie" się

 itd.

chyba, że taki był Twój zamiar. smiley

 

Ten zapis "chroni" przed pokazywaniem się w polu input wyżej wymienionych.

(plus nie wymaga maxlengthfeed.value.length, "zatrzymuje" działanie klawiszy Delete i Backspace)

<div class="controls-input-section" id="feed-section">
  <span class="input-text">Feed</span>
  <input type="text" id="feed" 
         class="controls-text-fields" 
         style="caret-color: transparent">  
</div>
document.addEventListener('DOMContentLoaded', () => {
  const feed = document.querySelector('#feed');

  feed.addEventListener('beforeinput', (e) => {
    e.preventDefault();
    if (e.data != null && e.data != ' ') feed.value = e.data;
  });
});


wersja z keydown  smiley

  feed.addEventListener('keydown', (e) => {
    e.preventDefault();
    const not_allowed_key = [
      ' ', 'shift', 'escape', 'control', 'alt',
      'tab', 'capslock', 'meta', 'insert', 'delete',
      'backspace', 'enter', 'altgraph', 'arrowleft',
      'arrowright', 'arrowup', 'arrowdown', 'numlock'
    ];

    if (! not_allowed_key.includes(e.key.toLowerCase())) { 
      feed.value = e.key;
    }
  });

 

komentarz 11 czerwca 2021 przez ScriptyChris Mędrzec (190,190 p.)

Trochę średnio jest ze wsparciem przeglądarek dla eventu beforeinput.

komentarz 11 czerwca 2021 przez VBService Ekspert (256,600 p.)

Chyba nie jest tak tragicznie  wink

beforeinput browser compatibility

komentarz 11 czerwca 2021 przez ScriptyChris Mędrzec (190,190 p.)

Wsparcie pokazane w tabelce MDN jest dla większości przeglądarek określone jako tak lub nie. Na caniuse jest tabelka uwzględniająca wersje poszczególnych przeglądarek i wsparcie jest dostępne dopiero od kilku miesięcy do roku. Natomiast, sądząc po kolejności wykonywania eventów klawiatury - beforeinput występuje po keydown - możliwe, że da się go w jakiś sposób polyfillować. Dlatego napisałem, że średnio ze wsparciem.

Podobne pytania

+1 głos
2 odpowiedzi 324 wizyt
pytanie zadane 17 czerwca 2020 w JavaScript przez Marak123 Stary wyjadacz (11,190 p.)
+1 głos
2 odpowiedzi 509 wizyt
pytanie zadane 1 grudnia 2024 w Python przez ceiem Nowicjusz (210 p.)
–1 głos
2 odpowiedzi 192 wizyt
pytanie zadane 29 października 2018 w C i C++ przez Kuba Jankowski Początkujący (300 p.)

93,604 zapytań

142,528 odpowiedzi

322,995 komentarzy

63,090 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...