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

Błędny kod addEventListener

Object Storage Arubacloud
+1 głos
372 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 (86,360 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 (86,360 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 (86,360 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 (253,300 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 (253,300 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 205 wizyt
pytanie zadane 17 czerwca 2020 w JavaScript przez Marak123 Stary wyjadacz (11,190 p.)
–1 głos
2 odpowiedzi 119 wizyt
pytanie zadane 29 października 2018 w C i C++ przez Kuba Jankowski Początkujący (300 p.)
0 głosów
0 odpowiedzi 276 wizyt
pytanie zadane 14 września 2018 w C i C++ przez Piotr Batko Stary wyjadacz (13,190 p.)

92,568 zapytań

141,422 odpowiedzi

319,629 komentarzy

61,956 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...