Сброс выбора radio кнопки в jQuery после AJAX-отправки

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

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

JS
Скопировать код
// В HTML создаем скрытую радиокнопку со свойством checked
<input type="radio" name="group" style="display:none" checked>

// В JavaScript описываем функцию для сброса выбранной радиокнопки
function uncheckRadio() {
  document.querySelector('input[type="radio"][name="group"][style="display:none"]').checked = true;
}

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

Кинга Идем в IT: пошаговый план для смены профессии

Просвещение с применением jQuery и JavaScript

В jQuery для отмены выбора используется конструкция $(this).prop('checked', false).

JS
Скопировать код
// Снимаем выбор с помощью возможностей jQuery
$("input[type='radio'][name='group']").on("click", function() {
  $(this).prop('checked', false); // Радиокнопка теперь не активна
});

Важно отметить, что принято использовать .prop() а не .attr() при работе со свойством 'checked', поскольку prop() обновляет состояние после загрузки DOM.

Для взаимодействия с checked в чистом JavaScript напишем:

JS
Скопировать код
// Снятие выбора с помощью чистого JavaScript
document.querySelector('input[type="radio"][name="group"]').checked = false;

Игра с радиокнопками: снятие выбора со всех

Чтобы снять выбор со всех радиокнопок, используйте следующий селектор в jQuery:

JS
Скопировать код
// Снятие выбора со всех радиокнопок
$("input:radio[name='group']").prop("checked", false);

Очистка содержимого текстовых полей

Чтобы очистить содержимое текстовых полей, используйте jQuery:

JS
Скопировать код
// Очищаем текстовые поля
$('#frm input[type="text"]').val("");

Точный удар с помощью обработчика событий

Обработчик события mousedown позволяет управлять выбором радиокнопки с высокой точностью:

JS
Скопировать код
// Снятие выбора с помощью обработчика mousedown
$("input:radio").on('mousedown', function(){
  var wasChecked = this.checked;
  $(this).one('click', function(){
    if(wasChecked){
      $(this).prop('checked', false);
    }
  });
});

После-запросы AJAX: последствия

После выполнения запросов AJAX необходимо корректно очистить форму:

JS
Скопировать код
// Функция для сброса состояния всех радиокнопок после выполнения запросов AJAX
function resetRadioButtons(){
  $("input:radio").prop('checked', false);
  // Здесь могут быть добавлены дополнительные действия по очистке
}

Визуализация

Здесь будет приведена визуализация отмены выбора радиокнопки в виде "парадокса Шрёдингера":

Если радиокнопка выбрана, кот в коробке жив:

JS
Скопировать код
radioButton.checked = true;  // 🐱 жив

Но согласно парадоксу Шрёдингера, кот, который был жив и им увиден, не может погибнуть:

JS
Скопировать код
radioButton.checked = false;  // 🐱 мёртв

Состояние кота (т.е радиокнопки) меняется от "выбранного" к "невыбранному":

Markdown
Скопировать код
До: [🐱]🚫 // Радиокнопка была выбрана (кот жив)
После: [☠️]✅ // Теперь радиокнопка не выбрана (кота нет)

Такое поведение противоречит естественной логике работы радиокнопок.

Миф и реальность: плагин jQuery, слежение за состоянием и другое

Создание плагина jQuery

Создание плагина jQuery может значительно облегчить работу с большим количеством форм:

JS
Скопировать код
// Плагин для jQuery, позволяющий отменить выбор
$.fn.uncheck = function() {
  return this.prop('checked', false);
};

// Применение плагина
$('input:radio').uncheck();

Отслеживание изменений состояния

Следующий код позволяет сохранить информацию о состоянии выбора с помощью jQuery:

JS
Скопировать код
// Сохранение состояния
$("input:radio").on('click', function() {
  $(this).data('wasChecked', this.checked);
});

// Получение ранее сохранённого состояния
var wasChecked = $("input:radio").data('wasChecked');

Великий план по отмене выбора

Добавьте в обработчик событий радиокнопки и соответствующие им метки:

JS
Скопировать код
// Обработка клика по радиокнопкам и их меткам
$("input:radio, label[for='myRadio']").on('click', function() {
  // Здесь следует прописать логику отмены выбора
});

Управление состоянием с помощью отслеживания переменных

Можно использовать переменные для управления состоянием в обработчиках событий:

JS
Скопировать код
// Использование переменных для управления состоянием
let isRadioChecked = false;

$("input:radio").on('click', function() {
  isRadioChecked = !isRadioChecked;
  if (!isRadioChecked) {
    $(this).prop('checked', false);
  }
});

Полезные материалы

  1. <input type="radio"> – HTML: Язык гипертекстовой разметки | MDN — Статья на MDN, посвящённая радиокнопкам.
  2. c# – HtmlTextWriter не осуществляет сброс при удалении? – Stack Overflow — Обсуждение на форуме Stack Overflow, в том числе вариантов по отмене выбора радиокнопок.
  3. HTML DOM Свойство checked радиокнопки – W3Schools — Информация о свойстве checked радиокнопок на сайте W3Schools.
  4. .prop() | Документация API jQuery — Документация метода .prop() из jQuery, где объясняется работа со свойством checked.
  5. Document: метод querySelector() – Веб API | MDN — Руководство по методу querySelector на MDN.
Свежие материалы