我在一个HTML表格上有一个搜索过滤器和复选框过滤器,它们都工作得很好,但它们是独立工作的。我希望能够选择一个类别,然后在该类别内使用搜索框。现在,如果我开始搜索,复选框会重置,反之亦然。
我认为有两种方法可以解决这个问题 - 要么更新GetElement函数以仅获取显示的内容,要么将两个if/else语句合并为一个。但是我是自学的,这对我来说都是新的,所以我在编写正确的代码方面遇到了困难!
我认为有两种方法可以解决这个问题 - 要么更新GetElement函数以仅获取显示的内容,要么将两个if/else语句合并为一个。但是我是自学的,这对我来说都是新的,所以我在编写正确的代码方面遇到了困难!
function myFunction() {
var input, filter, table, tr, td, i, txtValue;
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")[0];
if (td) {
txtValue = td.textContent || td.innerText;
if (txtValue.toUpperCase().indexOf(filter) > -1) {
tr[i].style.display = "";
} else {
tr[i].style.display = "none";
}
}
}
}
src = "https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"
// Select cluster
$(document).ready(function() {
$('input[type="checkbox"]').change(function() {
var inputValue = $(this).attr("value");
var checked = $(this)[0].checked;
$("tr").each(function() {
if ($(this).find("td:eq(1)").html() !== undefined && $(this).find("td:eq(1)").html().includes(inputValue.toString())) {
if (checked) {
$(this).show(); // slice by n numbers here
} else {
$(this).hide();
}
}
});
});
});
function checkedAll() {
console.log("All")
var elements = this.form.getElementsByTagName('input');
console.log(elements)
// iterate and change status
for (var i = elements.length; i--;) {
if (elements[i].type == 'checkbox') {
console.log(this)
elements[i].checked = this.checked;
$(elements[i]).trigger("change");
}
}
}
table#myTable {
width: 800px;
}
<!-- SEARCH -->
<h3>Search by keyword or phrase:</h3>
<input type="text" id="myInput" onkeyup="myFunction()" placeholder="Start typing to filter the table below" style="width:100%; transform: none;">
<!-- CHECKMARKS -->
<form action="" method="post" name="frm1" id="frm1">
<h3>Filter by category:</h3>
<label class="clickable">
<input type="checkbox" name="cluster_ids" id="cluster_ids" onclick="checkedAll.call(this);" checked /> Select all</label><br>
<div style="float:left; width:33%; min-width:200px;">
<label class="clickable">
<input value="For attorneys" type="checkbox" name="cluster_ids" checked/> For attorneys</label><br>
<label class="clickable">
<input value="For clinicians" type="checkbox" name="cluster_ids" checked/> For clinicians</label><br>
<label class="clickable">
<input value="For patients and families" type="checkbox" name="cluster_ids" checked/> For patients and families</label><br>
<!-- TABLE -->
<table id="myTable">
<tr>
<th>
<h1>Resource</h1>
</th>
<th>
<h1>Category</h1>
</th>
</tr>
<tr>
<td>
<h3>20 things patients can do to help prevent medical errors</h3>
<p>Information for patients from the Agency for Healthcare Research and Quality (AHRQ)</p>
</td>
<td class="topic-column">For patients and families</td>
</tr>
<tr>
<td>
<h3>Best practices for attorneys representing patients using CARe</h3>
<p>How lawyers can best support patients during the CARe process</p>
</td>
<td class="topic-column">For attorneys</td>
<tr>
<td>
<h3>Clinician CARe communication algorithm</h3>
<p>Flow chart with examples of what to say and what not to say during conversations with patients and families</p>
</td>
<td class="topic-column">For clinicians</td>
</tr>
<tr>
<td>
<h3>Guidelines for handling medical adverse events: Enhancing safety through candid communication</h3>
<p>Covers the seven aspects of response to adverse events: initial response, truth-telling, apologies, mediation, root cause analysis, compensation, and reporting</p>
</td>
<td class="topic-column">For clinicians</td>
</tr>
<tr>
<td>
<h3>Handout for patients</h3>
<p>A patient-focused flyer that explains the elements of CARe</p>
</td>
<td class="topic-column">For patients and families</td>
</tr>
</table>