Mam na stronie dwa skrypty. Jeden wyświetla DIVy z zawartością, w zależności od wyboru w SELECT. Tego ładuję w <head>:
let selector = document.getElementById('productType'); const dynamicFields = document.getElementsByClassName('dynamicFields'); selector.addEventListener("change", () => { let visible = document.getElementById(selector.value); for (var i = 0; i < dynamicFields.length; i++) { let c = dynamicFields[i]; c.style.display = 'none'; } visible.style.display = 'block'; })
Drugi natomiast sprawdza, czy wypełniono wszystkie wymagane pola input i jeśli któreś jest puste to wrzuca w DIV wiadomość:
function validateForm() { document.getElementById("alertMessage").innerHTML = ""; var sku = document.forms["product_form"]["sku"].value; var name = document.forms["product_form"]["name"].value; var price = document.forms["product_form"]["price"].value; var productType = document.forms["product_form"]["productType"].value; if (sku == "" || name == "" || price == "" || productType == "") { let ele = document.getElementById('alertMessage'); ele.innerHTML += 'Please, submit required data.'; return false; } document.getElementById("product_form").submit(); }
Teraz kawałek htmla (zbędne elementy usunąłem):
Ten drugi skrypt, jak widać wrzucam bezpośrednio do formularza. Czemu? Sam nie wiem, tak było w przykładzie z netu który przerobiłem pod własną potrzebę.
<form method="POST" id="product_form" name="product_form" onsubmit="return validateForm()" action="http://xxx.pl/add-product"> <input type="text" id="sku" name="sku" /> <input type="text" id="name" name="name" /> <input type="text" id="price" name="price" /> <select id="productType" name="productType"> </select> Dalej są DIVy które mają się pokazywać jak wybiorę ich ID w SELECT: <div class="dynamicFields" id="DVD"> <div class="dynamicFields" id="book">
Ale do rzeczy. Pierwotnie był tylko pierwszy skrypt (wyświetlający DIVy w zależności co było wybrane w SELECT. I wszystko działało bez zarzutu.
Po dodaniu drugiego skryptu (sprawdzenie czy wpisano wartości do pół) pierwszy skrypt CZASAMI nie działa. Nie udało mi się stwierdzić jasno w jakiej sytuacji nie działa. Chyba najczęściej kiedy kliknę pole input text i nic w nie nie wpiszę i wtedy staram się wybrać select (żeby pokazać ukryty DIV).
Czy te skrypty mogą się jakoś między sobą gryźć?