Две панели поиска на одной странице php

У меня две панели поиска на одной странице php, но вторая не работает. У меня есть группа переключателей:

<form>
    <p><input type = "radio" value = "com" name = "radioPM" />One</p>  
    <p><input type = "radio" value = "all" name = "radioPM" />Two</p>  
</form>

с некоторым jQuery, который показывает div, в зависимости от выбора радио:

<script>
    $(document).ready(function () {
        $('input[type=radio][name=radioPM]').change(function () {
            if (this.value == 'com') {
                $("#comDiv").show();
                $("#allDiv").hide();
            } else if (this.value == 'all') {
                $("#allDiv").show();
                $("#comDiv").hide();
            }
        });
    });
</script>

после этого у меня есть два div, каждый из которых имеет в своей строке поиска:

<div id ='comDiv' style = "display:none">

    <input type = "text" id = "myInput" onkeyup = "searchByName()" placeholder = "search..." title = "search...">

    <?php
    include_once('query_1.php');

    echo "<table border='1' id='myTable'>
                    <tr>
                        <th>One</th>
                        <th>Two</th>
                    </tr>";

    while ($row = mysqli_fetch_array($query_1)) {
        echo "<form method=\"post\"><tr>";
        echo "<td>" . $row['ONE'] . "</td>";
        echo "<td>" . $row['TWO'] . "</td>";
        echo "</tr></form>";
    }
    echo "</table>";
    ?><br>

</div>

<div id ='allDiv' style = "display:none">

    <input type = "text" id = "myInput" onkeyup = "searchByName()" placeholder = "search..." title = "search...">

    <?php
    include_once('query_2.php');

    echo "<table border='1' id='myTable'>
                    <tr>
                        <th>One</th>
                        <th>Two</th>
                    </tr>";

    while ($row = mysqli_fetch_array($query_2)) {
        echo "<form method=\"post\"><tr>";
        echo "<td>" . $row['ONE'] . "</td>";
        echo "<td>" . $row['TWO'] . "</td>";
        echo "</tr></form>";
    }
    echo "</table>";
    ?><br>

</div>

и, наконец, в конце у меня есть скрипт с функцией панели поиска:

<script>
    function searchByName() {
        var input, filter, table, tr, td, i;
        input = document.getElementById("myInput");
        filter = input.value.toUpperCase();
        table = document.getElementById("myTable");
        tr = table.getElementsByTagName("tr");
        for (i = 0; i < tr.length; i++) {
            td = tr[i].getElementsByTagName("td")[1];
            if (td) {
                if (td.innerHTML.toUpperCase().indexOf(filter) > -1) {
                    tr[i].style.display = "";
                } else {
                    tr[i].style.display = "none";
                }
            }
        }
    }
</script>

Моя проблема в том, что если я выберу первый вариант (value = com), все будет работать нормально, появится comDiv, панель поиска будет искать в таблице из базы данных mysql. Но если я выберу второй вариант (значение = все), comDiv скрывается и появляется allDiv, данные из базы данных mysql отображаются, но панель поиска не работает. Не могли бы вы помочь мне, что я делаю не так?

вы не должны использовать this, но $ (this) при работе с jquery

LAMG 07.12.2018 08:30
Поведение ключевого слова "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
1
473
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я думаю, вам следует указать конкретный селектор в функции searchByName (). Поскольку обе таблицы имеют одинаковый идентификатор "myTable". Либо вы должны изменить идентификаторы таблиц, либо вы можете указать как $ ("# comDiv"). Find ("myTable") и $ ("# allDiv"). Find ("myTable") .

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

id должен быть уникальным в HTML-документе (myInput и myTable используются дважды)

вы можете обновить свой код, как показано ниже, или использовать окно поиска мошенников

<input type = "text" id = "myInput1" onkeyup = "searchByName('myInput1','myTable1')" placeholder = "search..." title = "search..."> // id as searchByName parameter 

<input type = "text" id = "myInput2" onkeyup = "searchByName('myInput2','myTable2')" placeholder = "search..." title = "search...">

<script>
    function searchByName(myInput,myTable) {
        var input, filter, table, tr, td, i;
        input = document.getElementById(myInput);
        filter = input.value.toUpperCase();
        table = document.getElementById(myTable);
        tr = table.getElementsByTagName("tr");
        for (i = 0; i < tr.length; i++) {
            td = tr[i].getElementsByTagName("td")[1];
            if (td) {
                if (td.innerHTML.toUpperCase().indexOf(filter) > -1) {
                    tr[i].style.display = "";
                } else {
                    tr[i].style.display = "none";
                }
            }
        }
    }
</script>

и изменить идентификатор таблицы echo "<table border='1' id='myTable1'> и "<table border='1' id='myTable2'>

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