Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Прервать выполнение функции из другой функции (https://javascript.ru/forum/jquery/29287-prervat-vypolnenie-funkcii-iz-drugojj-funkcii.html)

Sufir 22.06.2012 10:18

Прервать выполнение функции из другой функции
 
Есть динамически генерируемая форма с неизвестным количеством полей. Все поля должны быть заполнены.

jQuery(".field[value=""]") находит поля у которых изначально value был пустым, и после заполнения тоже возвращает их. Я решил пройтись по всем полям each'ем и при обнаружении пустого поля прервать отправку формы и пр. действия onclick.

$('button').click(function(){

            jQuery.each(jQuery(".field"), function (k, item) {
                if (jQuery.trim(jQuery(item).val()) == "") {
                    alert('Заполните все поля!');
                }
            });

            // прочие действия...

});

Как мне прервать выполнение всех последующих действий при нахождении незаполненного поля? Или, может как-то это более рационально и правильно реализовать можно?

Deff 22.06.2012 10:29

Sufir,
Воть так это делаеся
<form id="upload" class="container" method="post" enctype="multipart/form-data" action="profile.php?action=upload" onsubmit="return process_form(this)">

По субмиту - запускается функция проверки формы
process_form(this) - при возврате функцией false - отправка формы запрещена

Sufir 22.06.2012 11:27

Deff, эммм... Это хорошо конечно, но отправку предотвратить не проблема. А что находится внутри функции process_form?

function process_form(form){

            jQuery.each(jQuery(form).find(".field"), function (k, item) {
                if (jQuery.trim(jQuery(item).val()) == "") {
                    alert('Заполните все поля!');
                    // Вот тут нужно прервать дальнейшее выполнение и заставить process_form вернуть false
                }
            });

});

Sufir 25.06.2012 11:55

Мда... Это я тупанул, кончно:
$('button').click(function(){

            var emptyInputs = 0;
            jQuery.each(jQuery(".field"), function (k, item) {
                if (jQuery.trim(jQuery(item).val()) == "") {
                    emptyInputs++;
                }
            });

            if (emptyInputs) {
                alert('Заполните все поля!');
            } else {
                // прочие действия...
            }

});


А вообще есть ещё $.prop() и $.map() - с ними всё было бы гораздо удобнее и проще, стоило только копнуть поглубже...


Часовой пояс GMT +3, время: 21:43.