jQuery Выберите флажок, когда текст существует, скрыть невыбранные строки от печати

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

Я хочу автоматически установить флажок для выбранной строки после ввода текста в текстовое поле этой строки. Наконец, когда нажата кнопка «Готово», я хочу, чтобы все невыбранные строки были скрыты от печати. Конечным результатом будет таблица, содержащая только выбранные строки (т. е. отмеченные флажком) и их значения.

Вот класс печати css, чтобы скрыть невыбранные строки:

<style type="text/css" media="print">
.grid .hidden tr {
  display:none;
}
</style>

Вот HTML:

<table id="data" class="grid">
<thead>
    <tr>
        <th>&nbsp;</th>
        <th>Part Number</th>
        <th>Description</th>
        <th>Qty to Order</th>
    </tr>
</thead>
<tbody>
    <tr>
        <td><input type="checkbox" class="check"></td>
        <td>1234</td>
        <td>Description data goes here</td>
        <td><input type="text" class="inputData"></td>
    </tr>
    <tr>
        <td><input type="checkbox" class="check"></td>
        <td>3454</td>
        <td>Description data goes here</td>
        <td><input type="text" class="inputData"></td>
    </tr>
    <tr>
        <td><input type="checkbox" class="check"></td>
        <td>6787</td>
        <td>Description data goes here</td>
        <td><input type="text" class="inputData"></td>
    </tr>
</tbody>
</table>
<button id="clicker">Finish</button>

Наконец, вот файл jQuery. Это установка всех флажков при вводе текста в текстовое поле, а не только одного для этой строки (чего я не понимаю), и не присвоение «скрытого» класса строкам без флажка - класс не назначается вообще.

$(document).ready(function() {
//Check for input in text field
$('#data > tbody > tr').each(function() {
    $(".inputData").change(function() { 
        if ($(this).val().length > 0) {
            $(".check").prop("checked",true);
        } else {
            $("tr").addClass("hidden");
        }
    });
});

$("#clicker").click(function() {
        window.print();
        return false;
});
});


</script>

Моя логика при построении этого заключалась в том, чтобы убедиться, что мы выбираем только строки в таблице с идентификатором данных. Первая функция будет перебирать каждую строку, просматривая текстовое поле, и если длина этого поля больше 0, установите флажок. В противном случае присвойте класс «скрытый», что предотвратит его печать. Наконец, просто назначьте событие нажатия на кнопку.

Любая помощь приветствуется.

Вот jsFiddle


person SpaceAge    schedule 08.09.2015    source источник
comment
вы пытаетесь использовать этот jsfiddle.net/9covoh57/3?   -  person Sushil    schedule 08.09.2015
comment
Нет, это не скрывает невыбранные строки   -  person SpaceAge    schedule 08.09.2015


Ответы (1)


Это устанавливает или снимает соответствующий флажок в зависимости от того, имеет ли ввод значение:

$(".inputData").on('input', function () {
  var checkbox= $(this).closest('tr').find('[type="checkbox"]');
  checkbox.prop('checked', $(this).val());
});

Это не обязательно должно быть внутри метода each().

Это скрывает все строки, в которых флажки не отмечены:

  $('[type="checkbox"]:not(:checked)').closest('tr').hide();

Имеет смысл поместить это в функцию $("#clicker").click().

Обновленный скрипт

person Rick Hitchcock    schedule 08.09.2015
comment
Спасибо Рик - это работает отлично. Я не совсем понимаю, почему вам не нужно перебирать строки. - person SpaceAge; 08.09.2015
comment
Это относится ко всем текстовым вводам: $(".inputData").change(. Помещение его в each() не делает его применимым только к вводу этой конкретной строки. Вместо этого мой код определяет, к какой строке относится ввод (используя closest('tr')), а затем находит флажок в этой строке (используя find('[type="checkbox"]')). - person Rick Hitchcock; 08.09.2015
comment
Это имеет смысл. Еще раз спасибо. - person SpaceAge; 08.09.2015