Cześć wszystkim!
Mam taki o to problem ( z góry dziękuję za odpowiedzi )
Otwieram za pomocą input type="button" okno popup.
Js wybiera kontener za pomocą id elementu.
A więc wymyśliłem sobie aby wyciągnąć popup z pętli ( jeden kontener Popup dla każdego rekordu ).
A więc idąc dalej, pomyślałem, że będę musiał zmieniać ID Popup w zależności od id buttona ( tak aby rekordy w Popupie pochodziły od konkretnego ID )
No to przecież nie problem, piszemy Jquery.
$(".button-class").click(function(){ var newid = this.id; $(".popup").attr("id", newid); });
Wartość atrybutu id powinna być unikalna - czyli nie może być dwóch lub więcej elementów (tu przycisku i okna) o tej samej wartości id.
W jakim celu ustawiasz id dla okna?
Racja!
JS pobiera value z data-modal-target.
<http://december.com/html/4/element/input.html data-modal-target="#modalresult{$target_row['id']}" onClick="check_click(this.id)" type="button" class="phone phone-off" name="call">
$(".phone-off").click(function(){ var newid = this.id; $(".modal").attr("id", newid); });
Warto przeglądać manual: https://api.jquery.com/data/
Hmm.. no dobra.
$(".phone-off").click(function(){ var modal = $(this).attr('data-modal-target'); var newid = modal.replace(/#/, ''); $(".modal").attr("id", newid); });
Ale jak się ma Twój kod do zawartości popupa? Tu ustawiasz mu wyłącznie id po kliknięciu na jakiś element.
const openModalButtons = document.querySelectorAll('[data-modal-target]') openModalButtons.forEach(button => { button.addEventListener('click', () => { const modal = document.querySelector(button.dataset.modalTarget) openModal(modal) }) }) function openModal(modal) { if (modal == null) return modal.classList.add('active') overlay.classList.add('active') }
Po pierwsze robisz gigantyczny błąd czyli przypinasz zdarzenie to każdego elementu zamiast jednego rodzica (delegacja). Po drugie dlaczego raz piszesz w jquery a raz w czystym js. Możesz na klik albo podstawić na żywo treść, albo np wczytać dynamicznie.
No nie będę ukrywać, że nie jestem ogarnięty jeśli chodzi o JS czy Jquery. Raczej podstawy.
1) Przeczytałem twój artykuł? o propagacji i delegacji.
Kontener przechowujący Button jest tak samo powielany co ilość buttonów. W pętli.
Następny kontener to Box, który już nie jest powielany, z niego powinien delegować do potomka?
Poważnie, teraz to bardziej szukanie rozwiązania po omacku.
2) Dlaczego nie umieszczać w dokumencie zarówno skryptów Jquery jak i czysty JS ? - z ciekawości.
Btw. problem rozwiązany ale po co uczyć się złych praktyk
1. Tak
2. A po co sobie utrudniać życie? Mimo wielu ułatwień sporo rzeczy łatwiej zrobić w jquery. Chyba że celem nauki.
To jak w końcu zrobiłeś bo trueblue też ma wątpliwości co tworzysz.
Jeśli chodzi o nadwanie warości id to:
$(function(){ $(".main").on('click','.target > .phone-off',function(){ var modal = $(this).attr('data-modal-target'); var newid = modal.replace(/#/, ''); $(".mmain").attr("id", newid); var clearid = newid.replace(/[^0-9]/gi, ''); $(".id-none").val(clearid); }); });
$(function(){ $(".phone-off").click(function(){ var modal = $(this).attr('data-modal-target'); var newid = modal.replace(/#/, ''); $(".mmain").attr("id", newid); var clearid = newid.replace(/[^0-9]/gi, ''); $(".id-none").val(clearid); }); });
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)