#jquery #asp.net-mvc
#jquery #asp.net-mvc
Вопрос:
Как я могу выполнять поиск, используя 2 или более полей поиска одновременно? Я сделал что-то вроде этого:
Вид:
<th>
<p>
Nr account: @Html.TextBox("Account")
<input type="button" id="search" value="Search" />
</p>
<p>
Nr invoice: @Html.TextBox("Invoice")
<input type="button" id="search" value="Search" />
</p>
</th>
jQuery:
$('#search').click(function () {
var value = $("#Account, #Invoice").val().toLowerCase();
$("#myTable tr").filter(function () {
$(this).toggle($(this).text().toLowerCase().indexOf(value) > -1)
});
});
Вообще говоря, когда я нажимаю «Поиск», таблица фильтруется по значению первого поля поиска — «Учетная запись». Я бы хотел, чтобы таблица фильтровалась по значениям из обоих полей поиска, где ошибка?
Комментарии:
1. Привет, обе ваши кнопки
id
одинаковы, поэтому они работают для первой кнопки, а не для второй. Вместо этого используйтеclass
.2. @Swati это хороший момент, спасибо, но он все равно не работает. Даже когда я передаю одно значение поля поиска (например, «Учетная запись»)
var value
и нажимаю кнопку «Поиск», это не работает. Не знаю, работает ли это с классами.. Я думаю, что также неправильно присваивать значенияvar value
Как я могу вызвать функцию поиска под.search
кнопкой для обоих полей?
Ответ №1:
Вам нужно использовать class
селектор вместо id
и при нажатии кнопки получать оба значения отдельно и просто сравнивать оба значения внутри each
цикла.
Демонстрационный код :
$('.search').click(function() {
//get both values
var value = $("#Account").val().toLowerCase();
var value2 = $("#Invoice").val().toLowerCase();
$("#myTable tbody tr").filter(function() {
var texts =$(this).text().toLowerCase()
//check both condition
$(this).toggle(texts.indexOf(value) > -1 amp;amp; (texts.indexOf(value2) > -1))
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table id="myTable">
<thead>
<tr>
<th>
<p>
Nr account<input type="text" id="Account">
<input type="button" class="search" value="Search" />
</p>
<p>
Nr invoice:<input type="text" id="Invoice">
<input type="button" class="search" value="Search" />
</p>
</th>
</tr>
</thead>
<tbody>
<tr>
<td>Xavier</td>
<td>41</td>
</tr>
<tr>
<td>Muska</td>
<td>38</td>
</tr>
<tr>
<td>Swati</td>
<td>45</td>
</tr>
</tbody>
</table>
Комментарии:
1. Да, это работает! Отлично, спасибо, Свати! Еще один вопрос: когда я дополнительно хочу фильтровать по выбранному параметру в выпадающем списке, например:
@Html.DropDownList("filterList", new List<SelectListItem>{new SelectListItem { Text="", Value= "", Selected=true},new SelectListItem { Text="Payment", Value="Payment"},})
затем я добавляюvar value3 = $("#filterList").val();
и проверяю это дополнительное условие здесь:$(this).toggle(texts.indexOf(value) > -1 amp;amp; (texts.indexOf(value2) > -1 amp;amp; (texts.indexOf(value3) > -1))
Правильно?2. Да, вам просто нужно добавить это условие. Дайте мне знать, если это не сработало 🙂
3. Я добавил
$("#filterList:selected")
, и это работает. Спасибо!4. К сожалению, он не работает вместе с другими полями поиска, я проверил его еще раз.