2017-02-15 3 views
2

Я хотел бы попросить помощи с функцией, которая объединяет флажки в одном поле. В вопросе Combine checkbox values into string before submitting form Я нашел один, но я бы хотел, чтобы он начал передавать с другой функцией, которая проверяет, была ли форма заполнена правильно.javascript - Объединение флажков в одно поле в форме

Форма:

<form id="formularz_wspolpraca" name="Zapis na poradnik" method="post" target="_top" onsubmit="return SprawdzFormularz(this) && mergeFunction(this)"> 
    <input type="text" id="email" name="email"/> 
    <input type="text" id="imie" name="imie"/> 
    <input type="text" id="nazwisko" name="nazwisko"/> 
    <input type="text" maxlength="12" size="12" id="pole_1" name="pole_1"/> 
    <input class="checkbox_wspolpraca" type="Checkbox" name="pole_3a" value="polecajacy"> 
    <input class="checkbox_wspolpraca" type="Checkbox" name="pole_3b" value="projektant"> 
    <input class="checkbox_wspolpraca" type="Checkbox" name="pole_3c" value="instalator"> 
    <input class="checkbox_wspolpraca" type="Checkbox" name="pole_3d" value="ekspert"> 
    <input type="hidden" name="pole_3" id="pole_3"> 
    <input id="pp" type="checkbox" name="pp" checked=""/> 
    <input type="submit" value="Wyślij"> 
</form> 

функция Merge:

function mergeFuntion(event) { 
    event.preventDefault(); 
    var boxes = document.getElementsByClassName('checkbox_wspolpraca'); 
    var checked = []; 
    for (var i = 0; boxes[i]; ++i) { 
     if (boxes[i].checked) { 
     checked.push(boxes[i].value); 
     } 
    } 
    var checkedStr = checked.join(' '); 
    document.getElementById('pole_3').value = checkedStr; 
    return true; 
} 

Функция проверки:

function SprawdzFormularz(f) { 
    if (f.email.value == "") { 
     alert("Nie poda\u0142e\u015b/a\u015b adresu e-mail."); 
     return false; 
    } 
    if (((f.email.value.indexOf("@", 1)) == -1) || (f.email.value.indexOf(".", 1)) == -1) { 
     alert("Poda\u0142e\u015b/a\u015b b\u0142\u0119dny adres e-mail."); 
     return false; 
    } 
    if (f.imie.value == "") { 
     alert("Wype\u0142nij pole Imi\u0119. "); 
     return false; 
    } 
    if (f.nazwisko.value == "") { 
     alert("Wype\u0142nij pole Nazwisko. "); 
     return false; 
    } 
    if (f.pole_1.value == "") { 
     alert("Wype\u0142nij pole Nr telefonu. "); 
     return false; 
    } 
    if ((f.pole_3a.checked == false) && (f.pole_3b.checked == false) && (f.pole_3c.checked == false) && (f.pole_3d.checked == false)) { 
     alert("Wybierz zakres wsp\u00f3\u0142pracy"); 
     return false; 
    } 
    if (f.pp.checked == false) { 
     alert("Musisz zgodzi\u0107 si\u0119 z Polityk\u0105 Prywatno\u015bci."); 
     return false; 
    } 
    return true; 
} 

Функция проверки работает без проблем, но я не могу получить объединить один для работы л. Может кто-нибудь указать, что я делаю неправильно с функцией слияния? Я совершенно новичок в javascript, так что это может быть ошибка новобранец. Заранее спасибо.

ответ

1

В onsubmit вы запускаете SprawdzFormularz, и он возвращает true, если все проверки проходят. Это означает, что он отправит форму до запуска функции слияния.

Перед тем, как вернуть true, вам необходимо запустить функцию слияния внутри функции проверки, чтобы форма не отправлялась, прежде чем вы объединили строку и установили необходимое значение.

function SprawdzFormularz(f) { 

    // .... 


    var boxes = document.getElementsByClassName('checkbox_wspolpraca'); 
    var checked = []; 
    for (var i = 0; boxes[i]; ++i) { 
     if (boxes[i].checked) { 
      checked.push(boxes[i].value); 
     } 
    } 
    var checkedStr = checked.join(' '); 
    document.getElementById('pole_3').value = checkedStr; 

    return true; 
} 
+0

Работает как очарование. Большое спасибо! :) – krzsz

+0

@krzsz добро пожаловать! – AllTheTime