Очистить значение при переключении с помощью boolean

#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);
});
  

Я бы выбрал троичный подход Рона, если бы делал это только в одном месте.