Удалить всю строку таблицы с флажком, который был снят, когда пользователь нажимает на кнопку отправки

#javascript #jquery

#javascript #jquery

Вопрос:

У меня есть таблица с функцией флажка checkall / uncheckall, и таблица имеет и некоторые поля ввода, такие как текстовые поля, выпадающие списки. Пользователь должен установить хотя бы один флажок для обработки данных в таблице. Это работает нормально. Например, таблица имеет 3 строки, и пользователь устанавливает любой флажок и нажимает кнопку отправки, после чего оставшиеся две строки таблицы должны быть удалены и не отправлены. Я попробовал с приведенным ниже.

 $("input:not(:checked)").each(function () {
      $('input:not(:checked)').closest('tr').remove();
});
  

Но это удаление всей таблицы. Поэтому мне нужны только те строки таблицы, которые не отмечены, должны быть удалены. Любая помощь будет значительно оценена.
введите описание изображения здесь

Комментарии:

1. можете ли вы создать рабочий демонстрационный код?

2. @Swati, вот это скрипка jsfiddle.net/1u45q97x

Ответ №1:

Предполагая, что вы не используете <th></th> , ваша строка заголовка также была выбрана, потому что этот флажок также снят. Возможно, это будет причиной удаления всех строк. Консоль input:not:(:checked) . Это даст четкое представление.

Редактировать: тогда попробуйте это, может быть, это сработает

 $('#tableid').find('tr[input:not:(:checked)]').each(function()
{
      $(this).remove();
}
  

Комментарии:

1. Нет, я использую <th></th> эта строка полностью удаляет таблицу $('input:not(:checked)').closest('tr').remove();

2. это удаление данных таблицы, кроме заголовка таблицы $('input:not(:checked)').parent('tr').remove();

Ответ №2:

Кажется, у меня все работает нормально: https://jsfiddle.net/r9zgvbqu/7 /

Два комментария, вы используете .each() функцию, чтобы сделать что-то для всех выбранных элементов "input:not:(:checked)" , но в этой функции выбираете все снова. итак, вы просто делаете одно и то же несколько раз. Вы можете пропустить этот шаг, а также пропустить .each() $(this) предложенную комбинацию -, выполнив straightup:

 $("input:not(:checked)").closest('tr').remove();
  

Это удаляет все, что вы хотите.

РЕДАКТИРОВАТЬ: Ваша проблема в том, что вы выбираете все непроверенные входные данные, включая текстовые вводы и т.д. Вы можете указать тип ввода, который вы выбираете: input[type=checkbox]:not(:checked)

В общем, я бы не стал выбирать элементы по имени их тега. Лучше присвоить соответствующим флажкам класс, и вы можете выбрать их по классу.

Вот исправленная версия вашей скрипки: https://jsfiddle.net/927sdh8n /

И вот более простая и безопасная версия с использованием классов: https://jsfiddle.net/qz53wfxc /

Комментарии:

1. Спасибо за ваш ответ. Но некоторые способы также удаляют все строки таблицы из таблицы

2. Вот скрипка, которую я создал. jsfiddle.net/1u45q97x

3. Ваша таблица содержит больше входных данных, которые все не отмечены (поскольку они не являются флажками). попробуйте ввести [type=checkbox] . Я отредактирую свой ответ.