#jquery
#jquery
Вопрос:
У меня есть скрытый div с элементами формы в нем, который я переключаю на опцию выбора по радио (в качестве опций думаю «да» / «нет»)
Если они выберут да, отобразите div и требуйте поля, в противном случае скройте div и очистите поля (если они ввели какое-либо значение).
Я могу сделать все это, за исключением очистки значения с передачей логического флага функции переключения
Пример:
$("[name=nameOfElement]").change(function() {
var show = $('input[name=nameOfElement]:checked').val() == "true";
$('#hiddenForm').toggle(show);
$('#hiddenInput').toggleClass('required',show);
});
Есть ли что-нибудь, что очищает значение при переданном boolean параметре?
$("[name=nameOfElement]").change(function() {
var show = $('input[name=nameOfElement]:checked').val() == "true";
$('#hiddenForm').toggle(show);
$('#hiddenInput').toggleClass('required',show).valClear(show);
});
ОБНОВЛЕНИЕ: Не ищу плагин, просто хотел узнать, могу ли я сделать это без условия if / else
Ответ №1:
Может быть
$("[name=nameOfElement]").change(function() {
var show = $('input[name=nameOfElement]:checked').val() == "true";
$('#hiddenForm').toggle(show);
$('#hiddenInput').toggleClass('required',show).val(show ? $('#hiddenInput').val() : '');
});
Ответ №2:
Вы могли бы прикрепить несколько обработчиков изменений:
$("[name=nameOfElement]").change(function() {
var show = $('input[name=nameOfElement]:checked').val() == "true";
$('#hiddenForm').toggle(show);
$('#hiddenInput').toggleClass('required',show);
});
$("[name=nameOfElement]").change(function() {
if($('input[name=nameOfElement]:checked').val() == "true")
$('#hiddenInput').val('');
});
Но для меня это выглядит хуже, чем использование только одного обработчика с условием. Вы также могли бы создать свой собственный маленький плагин, чтобы добавить что-то вроде вашего valClear
:
(function($) {
$.fn.clearIf = function(clearIt) {
if(clearIt)
this.each(function() { $(this).val(''); });
return this;
};
})(jQuery);
И затем:
$("[name=nameOfElement]").change(function() {
var show = $('input[name=nameOfElement]:checked').val() == "true";
$('#hiddenForm').toggle(show);
$('#hiddenInput').toggleClass('required',show).clearIf(!show);
});
Я бы выбрал троичный подход Рона, если бы делал это только в одном месте.