Ненавязчивая проверка MVC3: как удалить / повторно присоединить проверку из группы элементов? - PullRequest
6 голосов
/ 06 октября 2011

Вот пример использования:

У меня есть эта длинная форма с группой полей, которая становится видимой, только если пользователь делает определенный выбор в одном из видимых входов.Читая пост Брэда Уилсона на эту тему, я подумал, что jQuery.validator.unobtrusive.parse ('. Extra-data'), где .extra-data - это класс скрытого div.Не повезло, поскольку данные уже были там, когда был выполнен первый анализ.

Так что в конце я придумал это, чтобы удалить правила:

$('.data-panel').find('input[type="text"], textarea, select').each(function (i, item) {
    var currentRules = $(item).rules('remove'); // Saving removed rules to a sorta dictionary
    if (!$.isEmptyObject(currentRules)) {
        removedRules[$(item).attr("name")] = currentRules;
    }
 });

и это снова присоединитьих:

$('.data-panel').find('input[type="text"], textarea, select').each(function (i, item) {
    if (!$.isEmptyObject(removedRules[$(item).attr('name')])) {
        $(item).rules('add', removedRules[$(item).attr('name')]);
    }
});

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

1 Ответ

23 голосов
/ 06 октября 2011

Не удаляйте и не обновляйте правила. Просто disable или enable входы. Отключенные поля не участвуют в проверке и не отправляются на сервер.

//disable inputs. No validation will occur on these
$('.data-panel').find('input[type="text"], textarea, select').attr('disabled', 'disabled');

//enable inputs. Validation is re-enabled
$('.data-panel').find('input[type="text"], textarea, select').removeAttr('disabled');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...