Проверяйте только видимые поля с помощью классов jQuery - PullRequest
1 голос
/ 17 октября 2011

Я проверяю форму с помощью проверки jQuery.

Для этого я добавляю в поля только определенный класс («обязательный», «электронная почта» и т. Д.).

Пример: <input id="form_linom" class="required" type="text" value="" name="form_linom" size="50">

Поскольку это большая и динамическая форма (выборки в некоторых полях скрывают или показывают другие поля) У меня возникают проблемы при отправке формы, поскольку валидатор не разрешает отправлять данные на сервер, поскольку проверяет также скрытые поля.

Я добавляю класс к каждому полю, создавая в PHP массив всех обязательных полей, а затем, если поле находится в этом массиве, класс добавляется.


Пожалуйста, прочитайте вопрос перед ответом. Меня не устраивают те несвязанные и «простые» ответы, которые только критикуют вопрос. Я разместил весь код, который я использую для проверки. Единственное, что я добавил, было в шапке:

$("#form_proyecto").validate();

Я отправил код в http://jsfiddle.net/yW73h/,, посмотрите, что поле электронной почты скрыто, но не позволяет отправлять форму. Мне нужно общее правило, которое собирает все обязательные поля, которые скрыты, а не только поле электронной почты, как в примере (в моей реальной форме у меня 54 поля).

Ответы [ 3 ]

0 голосов
/ 17 октября 2011

Это просто, и вы должны прочитать документацию jquery на их сайте. это подпадает под селекторы. Вы должны использовать следующие селекторы:

//1. attribute=value
$('[attributeName=value]')
//2. has attribute
$('[attribute]')
//3. mulitple selotors
$('[attributeName], [attributeName=value]')
//4. visible
$('Sector:visible')

поэтому пример для выбора будет

$('#formID input[minlength]:visible, #formID input[class=required]:visible');

Я предполагаю, что селектор будет очень длинным и медленным. также зная селектор, я бессмысленно, потому что вы используете плагин, который нуждается в форме. так что если вы хотите эту функцию, вы должны изменить плагин ... много !. так что найдите плагин, который делает это, напишите свой или измените форму. Это редкий недостаток плагинов. иногда они просто не делают то, что вам нужно.

0 голосов
/ 17 октября 2011

если вы используете плагин, вы можете установить для onsubmit значение false:

 $("form").validate({ 
     onsubmit: false, 
     errorPlacement: function (error, element) { },            
     showErrors: function(errorMap, errorList) {                         
        $.each(errorList, function() { 
            errorSummary += " * " + this.message + "\n"; 
        });        
        this.defaultShowErrors(); 
          }, 
     errorClass: "Alert" 
    });

Затем вы можете добавить классы к элементу, для которого вы хотите запустить проверку:

 $('.modalValidationGroup .causesValidation').click(function (evt) { 
        errorSummary = "You have the following errors: \n";            
        clearDataTable(); 
        setValidateRules(); 
        var $group = $(this).parents('.modalValidationGroup'); 
        var isValid = true; 
        $group.find(':input').each(function (i, item) { 
            if (!$(item).valid()) 
                isValid = false; 
        });

        if (!isValid) { 
            evt.preventDefault(); 
            alert(errorSummary); 
        } else { 
            //submit form            } 
 });
0 голосов
/ 17 октября 2011

Для такого рода вещей есть специальный селектор jQuery.

Он называется ............ подождите ............ : видимый !

Где вы должны поместить селектор, трудно сказать, когда нет отправленного кода!


РЕДАКТИРОВАТЬ: Опять же,Видимый селектор, вероятно, является подходящим способом, и трудно точно сказать, как его реализовать, но если проверка выполняется в соответствии с классами, добавленными к элементам ввода, вы можете просто удалить эти классы, а я использую противоположностьвидимый в примере, например, так:

$("form:hidden").removeClass();

Это удалит все классы на всех скрытых элементах формы, и как таковые они не будут проверены.

Если они будут видны сновапозже вам нужно будет сохранить классы и повторно применить их, когда они будут видны, я думаю, что-то вроде этого:

$("form:hidden").toggleClass();

переключит все классы.Это действительно так просто, хотя для работы с формой, конечно, потребуется еще немного работы, и вам, вероятно, следует написать что-то, чтобы обновить элементы, которые становятся видимыми из-за изменений, происходящих в форме с исходными классами снова.

Скрипка: http://jsfiddle.net/yW73h/8/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...