Cześć,
mam problem polegający na tym, że wywołuję funkcję z Listenerem w Listenerze i nie rozpoznaje mi jego rodzica. Próbuję na wszystkie sposoby odnieść się do rodzica ale nie działa to poprawnie. Dlaczego jak wykonuję funkcję z Listenerem na Listenerze głównym (czyli na option:1) to nie odwołuje mi się automatycznie do miejsca w HTML-u w którym akurat teraz jestem klikając na listę rozwijaną? Poza tym przekazuję do funkcji parametry z 1-go Listenera więc chyba to powinno zadziałać w drugim a nie działa:
VIEW (w pierwszej kolumnie czyli @html.Display... mam około 150 wierszy, w pozostałych tak samo):
<tr>
<td class="payment">
@Html.DisplayFor(modelItem => item.PaymentDate)
</td>
<td>
<select id="decisionList">
<option value="0" selected>Data manualna</option>
<option value="1">Data platnosci</option>
</select>
</td>
<td class="choice"></td>
</tr>
JS - główny Listener:
document.querySelectorAll("#decisionList").forEach(elem => elem.addEventListener("change", function () {
var selectedOptionIndex = this.options[this.selectedIndex].index;
var invoiceDateText = this.closest('tr').querySelector('.payment').textContent.trim();
var finalChoice = this.closest('tr').querySelector('.choice');
switch (selectedOptionIndex) {
case 0:
finalChoice.innerHTML = '<input type="date">'
break;
case 1:
finalChoice.innerHTML = '<input id="finalDate" type="date">'
finalDateListener(selectedOptionIndex, invoiceDateText); // tu do drugiego Listenera przekazuję parametry z pierwszego
default:
finalChoice.innerHTML = ''
}}));
JS - drugi Listener:
function finalDateListener(selectedOptionIndex, invoiceDateText){
const finalDate = document.getElementById("finalDate"); // tu odwołanie do ID z pierwszego listenera
finalDate.addEventListener("change", function () {
alert(invoiceDateText + ' ' + selectedOptionIndex); //alert wyskakuje tylko dla pierwszego wywołania tej funkcji, przy drugim i następnym juz nie
});
}
w Console Log po wywołaniu Listenera mam taki błąd:
Uncaught TypeError: Cannot read property 'addEventListener' of null
at finalDateListener (Site.js:78)
at HTMLSelectElement.<anonymous> (Site.js:61)