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

Przekazanie parametru

0 głosów
72 wizyt
pytanie zadane 14 sierpnia w JavaScript, jQuery, AJAX przez michal_php Bywalec (2,830 p.)

Cześć.

Mam problem aby przekazać parametr funkcji do document.querySelector.Chodzi o wartość take do pola id.

Nie za bardzo wiem jak to można zapisać aby tą wartość poprawnie odczytał.

let variable = document.querySelector('textarea[id="'+take+'"]');

 

2 odpowiedzi

+1 głos
odpowiedź 14 sierpnia przez pablop76 Szeryf (96,690 p.)
edycja 14 sierpnia przez pablop76

Jeżeli tag ma id to pobierz go po id.

 const variable = document.getElementById(id);

 

komentarz 14 sierpnia przez michal_php Bywalec (2,830 p.)

Jak daje tak to wywala mi błędy :

generator.js:420 Uncaught TypeError: Cannot read property 'value' of null
    at validateTextareaMixture (generator.js:420)
    at HTMLTextAreaElement.onkeydown

a zrobiłem tak:

 let variable = document.getElementById(take);

Bo to dla elementu  textarea

komentarz 14 sierpnia przez pablop76 Szeryf (96,690 p.)
Pokaż więcej kodu.
komentarz 14 sierpnia przez michal_php Bywalec (2,830 p.)
<textarea id="mixture_safety_helpInfo" name="mixture[safety][helpInfo]" maxlength="250" class="Textera-mixture form-control" onkeydown="validateTextareaMixture(mixture_safety_helpInfo)">Brak informacji.</textarea>

Kod JS:

function validateTextareaMixture(take) {
   // let variable = document.querySelector(`textarea[id=${take}]`);
    let variable = document.getElementById(take);
    console.log(variable.value.length);
}

 

komentarz 14 sierpnia przez Mati Gaduła (3,370 p.)
Funkcja jest dobra. Według błędu, który podałes wyżej wyszukuje textarea, ale takie textarea o podanym id nie znajduje(nie istnieje) i zwraca null stąd ten błąd w konsoli.
komentarz 14 sierpnia przez michal_php Bywalec (2,830 p.)
A co robię źle ,że zwraca null ? co mogę zmienić ?
komentarz 14 sierpnia przez Mati Gaduła (3,370 p.)

Przekazujesz takie id w parametrze elementu, który na pewno istnieje w strukturze DOM?

 

Możesz to zabezpieczyć:


function validateTextareaMixture(take) {
   // let variable = document.querySelector(`textarea[id=${take}]`);
    let variable = document.getElementById(take);
    if(variable) {
      console.log(variable.value.length);
    }
}

 

komentarz 14 sierpnia przez michal_php Bywalec (2,830 p.)
Co masz na myśli ,że na pewno istnieje w strukturze dom ?
komentarz 14 sierpnia przez Mati Gaduła (3,370 p.)

Czy istnieje textarea o podanym id w parametrze funkcji. Załóżmy mamy taki przypadek

<textarea id="content"></textarea>

1. Wywoałanie funkcji validateTextareaMixture('content');

2. let variable = document.getElementById('content');

3. console.log(variable) -> zwraca nam  //<textarea id="content"></textarea>;

W przypadku, gdy podasz błędne id i nie znajduje go w strukturze strony to zwraca Ci null.

W jaki sposób masz dodawane pola, które sprawdzasz za pomocą tej funkcji, są na sztywno wpisane w pliku html, czy dynamicznie? 

komentarz 14 sierpnia przez michal_php Bywalec (2,830 p.)

Działa zrobiłem jeszcze prościej :

function validateTextareaMixture(take) {

    console.log(take.value.length);
}

i zlicza długość znaków 

komentarz 14 sierpnia przez JSHolic Szeryf (79,520 p.)

@michal_php, proponuję precyzyjniej umieszczać kod w console.log lub debugować stan aplikacji jeśli coś nie działa lub działa inaczej niż oczekujesz. W podanym przykładzie (wyciąłem zbędne atrybuty z HTML, żeby kod był bardziej przejrzysty):

<textarea id="mixture_safety_helpInfo" onkeydown="validateTextareaMixture(mixture_safety_helpInfo)">Brak informacji.</textarea>

do funkcji validateTextareaMixture przekazujesz globalną zmienną mixture_safety_helpInfo (nie string), która - przez specyficzne zachowanie DOM - przechowuje obiekt DOM <textarea>. Zatem wewnątrz funkcji validateTextareaMixture:

function validateTextareaMixture(take) {
    let variable = document.getElementById(take);
    console.log(variable.value.length);
}

zmienna take jest już obiektem DOM, a nie ID jak się spodziewasz. Stąd metoda document.getElementById zwraca null. Dlatego, jak napisałeś w poprzednim komentarzu, kod: console.log(take.value.length); prawidłowo wyświetla długość znaków, bo operujesz na gotowym obiekcie DOM - nie musisz go pobierać. Czytelniej by było, gdybyś przekazał do funkcji this:

<textarea id="mixture_safety_helpInfo" onkeydown="validateTextareaMixture(this)">Brak informacji.</textarea>

A jeszcze lepiej opędzić to na addEventListener.

0 głosów
odpowiedź 14 sierpnia przez Mati Gaduła (3,370 p.)
edycja 14 sierpnia przez Mati

Aby przekazać parametr tym sposobem co ty musi to wyglądać tak i parametr musi być stringiem.

let variable = document.querySelector('textarea[id='+take+']');


Możesz też skorzystać z wersji es6 i znaków ``

let variable = document.querySelector(`textarea[id=${take}]`);

 

Przykład: https://jsfiddle.net/d2u1k84n/ (O takie coś Ci chodziło?)

Podobne pytania

0 głosów
2 odpowiedzi 77 wizyt
pytanie zadane 26 listopada 2018 w JavaScript, jQuery, AJAX przez Apper97 Obywatel (1,330 p.)
0 głosów
1 odpowiedź 39 wizyt
pytanie zadane 8 października 2018 w JavaScript, jQuery, AJAX przez Bakr Mądrala (6,740 p.)
0 głosów
2 odpowiedzi 93 wizyt
pytanie zadane 27 sierpnia 2018 w JavaScript, jQuery, AJAX przez bulit000 Początkujący (450 p.)
Porady nie od parady
Forum posiada swój własny chat IRC, dzięki któremu będziesz mógł po prostu pogadać z innymi Pasjonatami lub zapytać o jakiś problem. Podstrona z chatem znajduje się w menu pod ikoną człowieka w dymku.IRC

65,728 zapytań

112,369 odpowiedzi

237,231 komentarzy

46,688 pasjonatów

Przeglądających: 185
Pasjonatów: 4 Gości: 181

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...