Как скрыть строку заголовка таблицы, если нет дочерних строк, но снова показать строку заголовка, если нажата кнопка

У меня есть таблица с существующими заданиями и кнопка для добавления новых строк в эту таблицу, если пользователь хочет добавить другое задание. Когда пользователь впервые нажимает кнопку «Добавить новую», над первой строкой появляется заголовок. Существует также возможность удаления строк, и здесь возникает моя проблема.

Я хочу, чтобы строка заголовка исчезла, если пользователь удалит все добавленные строки, но проблема заключается в том, чтобы строка заголовка снова отображалась, когда пользователь снова нажимает кнопку «Добавить новую».

Я попытался установить для отображения значение none, что сработало нормально, но когда пользователь снова начинает добавлять строки, заголовок не появляется. Настройка видимости на скрытые тоже работает, но тогда вы видите пустое место там, где должен быть заголовок. Я также попытался добавить оператор if туда, где строка заголовка отображается в первый раз (установив для него значение table-row, если для него установлено значение none), но тогда «Добавить новый» вообще не работал.

Я не могу использовать jQuery, потому что страница использует MooTools, и они конфликтуют. Я очень новичок в MooTools и довольно новичок в JavaScript, поэтому, если кто-то может указать мне правильное направление, я был бы очень признателен.

$(document.body).addEvent('click:relay(.delete-row)', function (e, el) {
                try {
                    e.preventDefault();
                    .
                    .
                    .
                            if (document.getElementById('addNewJobHeader').style.display !== 'none' && el.get('data-row-id') === '1') {
                                document.getElementById('addNewJobHeader').setStyle('display', 'none');
                            }
                            rewriteeditingselections();
                        } else {
                            .
                            .
                            .
                        }
                    }
                } catch (e) {
                    .
                    .
                    .
                }
            });

            function showHeaderRow() {
                showHeaderRow = function() {};
                Elements.from(connectjobheadertemplate({})).inject($('linkedJobsBody'));
            }

            function addChildJobRow() {
                try {
                    lastrow++;
                    let cl = (lastrow % 2 ? 'odd' : 'even');
                    showHeaderRow();
                    var refNum = '<?php echo $this->MJob->getNewJobRef(232); ?>';
                    Elements.from(connectedjobtemplate({
                        rownum: lastrow,
                        cl: cl,
                        ref: refNum,
                        nysid: '',
                        dinNum: '',
                        warrantNum: ''
                    })).inject($('linkedJobsBody'));
                } catch (e) {
                    .
                    .
                    .
                }
            }

Обновлено: Добавление HTML:

Таблица существующих вакансий:

        <form method = "post" id = "linkedJobsForm" action = "###" name = "linkedJobsForm">
            <table width = "100%">
                <thead>
                <tr class = "odd">
                    <th align = "center">Chk</th>
                    <th>Ref #</th>
                    <th>Pages</th>
                    <th>Order Date</th>
                    <th>NYSID</th>
                    <th>DIN#</th>
                    <th>Warrant Number</th>
                </tr>
                </thead>
                <tbody id = "linkedJobsBody">
                                            <tr id = "connectjobrow0" class = "tc ec" data-row-id = "0" data-connected-job = "44752">
                            <td width = "50" align = "center">
                                <input type = "checkbox" name = "copyid[]" value = "44752"  />
                            </td>
                            <td>
                                <a href = "###" id = "jobReference[0]" name = "connectedjob[0][jobReference]"title = "###">###</a>                                </td>
                            <td>
                                <input style = "background-color: transparent; border: none;" type = "text"
                                    data-row-id = "0" id = "pages[0]"
                                    name = "connectedjob[0][pages]" onkeyup = "setPages(this.value, this.id)"
                                    value = "53" class = "pages" size = "3"/>
                            </td>
                            <td>
                                <input style = "background-color: transparent; border: none;" type = "text"
                                    data-row-id = "0" id = "date[0]"
                                       name = "connectedjob[0][orderDate]" onblur = "reformatDate(this.value, this.id)"
                                       value = "Dec 16, 2015" class = "datefield orderDate" size = "10">
                            </td>
                            <td>
                                <input style = "background-color: transparent; border: none;" type = "text"
                                    data-row-id = "0" id = "pages[0]"
                                    name = "connectedjob[0][nysid]" class = "nysid" onkeyup = "setNYSId(this.value, this.id)"
                                       data-row-id = "0" id = "nysid[0]"
                                       name = "connectedjob[0][nysid]" class = "nysid"
                                    value = "11991495H">
                            </td>
                            <td>
                                <input style = "background-color: transparent; border: none;" type = "text"
                                    data-row-id = "0" id = "pages[0]"
                                    name = "connectedjob[0][dinNum]" class = "dinNum" onkeyup = "setDinNum(this.value, this.id)"
                                       data-row-id = "0" id = "dinNum[0]"
                                       name = "connectedjob[0][dinNum]" class = "dinNum"
                                    value = "13R2708">
                            </td>
                            <td>
                                <input style = "background-color: transparent; border: none;" type = "text" onkeyup = "setWarrantNum(this.value, this.id)"
                                    data-row-id = "0" id = "pages[0]"
                                    name = "connectedjob[0][warrantNum]" class = "warrantNum"
                                    value = "0739791">
                            </td>
                        </tr>
                   </tbody>
            </table>

Кнопки:

            <div style = "float: right;"><button id = "add-new-row" style = "text-align:center;margin-top:5px;width:85px;" class = "boxbutton">Add New</button>&nbsp;<button style = "text-align:center;margin-top: 5px; width: 60px;" id = "save" class = "boxbutton">Save</button></div><br>            </form>

Шаблоны:

        <script id = "connectjobheadertemplate" type = "text/plain">
            <table>
                <tr class = "odd even" id = "addNewJobHeader" style = "display:table-row;">
                    <td colspan = "7">
                        <table width = "100%" style = "border:0px;border-style:hidden;">
                            <thead>
                                <tr>
                                    <th style = "width: 15%;">Name</th>
                                    <th style = "width: 15%;">Ref #</th>
                                    <th style = "width: 5%;">Pages</th>
                                    <th style = "width: 15%;">Order Date</th>
                                    <th style = "width: 15%;">NYSID</th>
                                    <th style = "width: 15%;">DIN#</th>
                                    <th style = "width: 15%;">Warrant Number</th>
                                    <th style = "width: 4%;"></th>
                                </tr>
                            </thead>
                        </table>
                    </td>
                </tr>
            </table>
        </script>
        <script id = "connectedjobtemplate" type = "text/template">
            <tr id = "childjobrow1" class = "odd" data-row-id = "1">
                <td colspan = "7">
                    <table width = "100%" style = "border:0px;border-style:hidden;">
                        <tr>
                            <td style = "width: 15%;">
                                <input class = "childjobid" type = "hidden" id = "childjobid1" name = "childjobid[1][transcribername]" value = "0" />
                                <input type = "hidden" id = "transcriberid[1]" name = "childjobid[1][transcriberid]" value = "" />
                                <input data-row-id = "1" id = "assignee[1]" name = "childjobid[1][transcribername]" class = "" list = "transcribers" autocomplete = "off" value = "" placeholder = "Name" size = "14" />
                            </td>
                            <td style = "width: 15%;">
                                <input data-row-id = "1" id = "reference[1]" name = "childjobid[1][reference]" value = "" class = "ref" size = "14" style = "background-color: transparent; border: none;" />
                            </td>
                            <td style = "width: 5%;">
                                <input data-row-id = "1" id = "pages[1]" name = "childjobid[1][pages]" value = "" class = "" style = "" size = "1"/>
                            </td>
                            <td style = "width: 15%;">
                                <input data-row-id = "1" id = "orderDate[1]" name = "childjobid[1][orderDate]" value = "" class = "" type = "date" size = "14" />
                            </td>
                            <td style = "width: 15%;">
                                <input data-row-id = "1" id = "nysid[1]" name = "childjobid[1][nysid]" value = "" class = "" size = "14" />
                            </td>
                            <td style = "width: 15%;">
                                <input data-row-id = "1" id = "dinNum[1]" name = "childjobid[1][dinNum]" value = "" class = "" size = "14" />
                            </td>
                            <td style = "width: 15%;">
                                <input data-row-id = "1" id = "warrantNum[1]" name = "childjobid[1][warrantNum]" value = "" class = "" size = "14" />
                            </td>
                            <td style = "width: 5%;align:center;">
                                <button data-row-id = "1" id = "0" class = "delete-row" style = "text-align:center;margin-top: 5px;width:30px;color: #fff;background-color: #b9534f !important;padding: 5px 10px;font-size: 12px;line-height: 1.5;border-style: none;">X</button>
                            </td>
                        </tr>
                    </table>
                </td>
            </tr>
        </script>

Какой у вас HTML?

Jack Bashford 07.04.2019 09:26

Пожалуйста, нажмите редактировать, затем [<>] редактор фрагментов стека и опубликуйте RENDERED HTML из исходного кода и соответствующих библиотек и CSS. Это не проблема PHP, так зачем публиковать PHP? Мы не можем отобразить html в голове и не загрузим его на сервер для проверки вашего кода. Нам нужен минимальный воспроизводимый пример

mplungjan 07.04.2019 09:41
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
504
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

$(document.body).addEvent('click:relay(.delete-row)', function (e, el) {
                try {
                    e.preventDefault();
                    var childjobid = parseInt(el.id);
                    var rowid = el.get('data-row-id');
                    if (confirm('This will immediately DELETE the current line.\nAre you sure?')) {
                        if (childjobid === 0) {
                            $('childjobrow' + el.get('data-row-id')).remove();
                            var rowsInTable = document.getElementById('newChildJobTable').rows.length;
                            if (rowsInTable === 1) document.getElementById('addNewJobHeader').style.display = 'none';
                            if ($('addNewJobHeader').style.display === 'none') {
                                $('newChildJobTable').setStyle('display', 'none');
                            }
                            rewriteeditingselections();
                        } else {
                            .
                            .
                            .
                        }
                    }
                } catch (e) {
                    .
                    .
                }
            });

Затем в функции добавления новой строки я проверил, установлено ли значение строки заголовка равным none, и если да, то установил для него значение «строка таблицы».

function addChildJobRow() {
                try {
                    lastrow++;
                    let cl = (lastrow % 2 ? 'odd' : 'even');
                    showHeaderRow();
                    if (document.defaultView.getComputedStyle(document.getElementById('addNewJobHeader'), '').getPropertyValue("display") === 'none') {
                        $('addNewJobHeader').style.display = 'table-row';
                    }
                    var refNum = '<?php echo $this->MJob->getNewJobRef(232); ?>';
                    Elements.from(connectedjobtemplate({
                        rownum: lastrow,
                        cl: cl,
                        ref: refNum,
                        nysid: '',
                        dinNum: '',
                        warrantNum: ''
                    })).inject($('newChildJobTable'));
                    $('newChildJobTable').setStyle('display', 'table');
                } catch (e) {
                    .
                    .
                    .
                }
            }

Другие вопросы по теме