Problem z pobraniem value z selecta (jQuery, OOP)

Problem z pobraniem value z selecta (jQuery, OOP)
KE
  • Rejestracja:ponad 5 lat
  • Ostatnio:około 5 lat
  • Postów:8
0

Cześć,
Mam problem aby pobrać value z elementów zawartych w select. Generalnie mechanizm działa na pobieranie z elemetów html napisanych na sztywno w pliku(Pole select wstawione poglądowe). Problem jest z pobraniem elementów które są dodawane za pomocą funkcji w skrypcie napisanym obiektowy i z użyciem jQuery. Klasa zawarta w kodzie tworzy obiekt, w którym umieszczane jest pole select.

Poniżej wstawiam fragmenty html-a oraz skryptu:

Kopiuj

<body>
<!-- Pole select wstawione poglądowe -->
    <div class="custom-select" style="width:200px;"> 
      <select id="list"> 
        <option value="0">Wybierz kolor:</option> 
        <option value="1">Szary</option>
        <option value="2">Zielony</option> 
        <option value="3">Niebieski</option>
      </select> 
    </div>
    
    <div id="board" class="board">
        <h1 class="board-title"> Tablica</h1>
        <button class="create-column"> Dodaj kolumnę</button>
        <div class="column-container"></div>
        
    </div>
</body>
</html>
Kopiuj
$(function() {


// KLASA COLUMN
class Column {
   constructor(name,color){
       var self = this;
       
       this.id = randomString();
       this.name = name || 'Draft';
       this.color = color || 'gray';
       this.$element = createColumn();

       function createColumn() {
           // Tworzenie elementów składowych kolumny
           var $column = $('<div class="column"></div>');
           $column.addClass( 'column--' + self.color );
           var $columnTitle = $('<h2 class="column-title">' + self.name.toUpperCase() + '</h2>');
           var $columnCardList = $('<ul class="column-card-list"></ul>');
           var $columnDelete = $('<button class="column-btn-delete">x</button>');
           var $columnAddCard = $('<a class="add-card">Dodaj kartę </a>');
           var $btnAddCard = $('<button class="btn-add">+</button>');

           // zmienna zawierająca element select
           var $checkbox = $('<div class="custom-select" style="width:200px;"> <select id="list"> <option value="0">Wybierz kolor:</option> <option value="1">Szary</option><option value="2">Zielony</option> <option value="3">Niebieski</option></select> </div>');        
   
           //PODPINANIE ZDARZEŃ
           //Delete column after click
           $columnDelete.click(function(){
               self.removeColumn()
           })
           //Add card after click
           $btnAddCard.click(function(){
               self.addCard(new Card(prompt("Wpisz nazwę karty")))
           })
   
           //Konstruowanie elementu kolumny
           $column.append($columnTitle)
                   .append($checkbox)
                   .append($columnDelete)
                   .append($columnAddCard)
                   .append($btnAddCard)
                   .append($columnCardList)
                   ;

           // FUNKCJA pobierająca value
           $('#list').change(function(){
               var getval = $(this).val();
               console.log(getval);
           }) ;
          
                     
           //Zwracanie stworzonej kolumny
           return $column;  
       }
       
   }
  
   
   addCard(card) {
           this.$element.children('ul').append(card.$element);
           
       }

   removeColumn() {
       this.$element.remove();
   }
  
}

Staram się pobrać value FUNKCJĄ pobierająca value, ale tak jak wspomniałem działa ona tylko na sztywny html, a nie na elementy tworzone zmienną $checkbox.
Będę wdzięczny za poradę.

edytowany 4x, ostatnio: kendyslaw
axelbest
  • Rejestracja:ponad 17 lat
  • Ostatnio:29 minut
  • Lokalizacja:Warszawa
  • Postów:2251
0

Spróbuj

Kopiuj
$('#list').on('change', (function(){.....}))

https://api.jquery.com/on/

edytowany 2x, ostatnio: axelbest
KE
Dzięki, ale efekt ten sam, działa tylko na sztywnym html-u. Tutaj będzie chodziło o to żeby zadziałało na elementach dodanych funkcją.
axelbest
Mógłbyś gdzieś wrzucić na jakiegoś jsbina ten kodzik? Ustaw tylko odpowiednie wersje JS'a itp itd.
KE
Ok, poniżej w poście całość
serek
  • Rejestracja:około 11 lat
  • Ostatnio:około 8 godzin
  • Postów:1475
1
Kopiuj
$(document).on('change', '#list', function() {});
KE
nie zadziałało to niestety
KE
  • Rejestracja:ponad 5 lat
  • Ostatnio:około 5 lat
  • Postów:8
0
axelbest napisał(a):

Spróbuj

Kopiuj
$('#list').on('change', (function(){.....}))

https://api.jquery.com/on/

Tutaj cały kod: https://codepen.io/wk-90/pen/yLNbemd

Tomek Opole
  • Rejestracja:prawie 7 lat
  • Ostatnio:28 dni
  • Lokalizacja:Opole
  • Postów:15
1

Główny błąd to powielanie id='list", w elementach, które tworzysz.
ID jest unikalne i nie możesz tak tworzyć kolejnych elementów z tym samym ID.
Dodawaj kolejne numery, czyli id1, id2 i tak dalej.
Ewentualnie odwołuj się do class jeżeli chcesz wybrać wszystkie elementy.

Twoja funkcja pobierająca value zauważa tylko pierwszy element o id="list".

Nindzia
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 3 lata
  • Postów:255
0

Dlaczego korzystasz OOP?

KE
KamilAdam
  • Rejestracja:ponad 6 lat
  • Ostatnio:około miesiąc
  • Lokalizacja:Silesia/Marki
  • Postów:5505
0
Nindzia napisał(a):

Dlaczego korzystasz OOP?

Bardziej co to jest OOP w kontekście jQuery?


Mama called me disappointment, Papa called me fat
Każdego eksperta można zastąpić backendowcem który ma się douczyć po godzinach. Tak zostałem ekspertem AI, Neo4j i Nest.js . Przez mianowanie
dzek69
skoro "wszystko w js jest obiektem", to jak nic jest to object oriented programming :D
KE
  • Rejestracja:ponad 5 lat
  • Ostatnio:około 5 lat
  • Postów:8
1
Tomek Opole napisał(a):

Główny błąd to powielanie id='list", w elementach, które tworzysz.
ID jest unikalne i nie możesz tak tworzyć kolejnych elementów z tym samym ID.
Dodawaj kolejne numery, czyli id1, id2 i tak dalej.
Ewentualnie odwołuj się do class jeżeli chcesz wybrać wszystkie elementy.

Twoja funkcja pobierająca value zauważa tylko pierwszy element o id="list".

Słuszna uwaga. Zmieniłem z id na class i następnie odwołałem sie do niej w funkcji. Musiałem jeszcze zmienić kod w ten sposób, że zdefiniowałem funkcję z zakresie globalnym a następnie wywołałem ją w metodzie tworzącej nową kolumnę - w ten sposób działa! :) Dzięki!

edytowany 1x, ostatnio: kendyslaw

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.