在网页网格表上进行实时搜索,分页仅在实际页面上工作
Live search on a web grid table with pagination working only on the actual page
我想在一个有分页的web网格表上实现一个实时搜索。但是,我的搜索只显示实际页面中存在的元素。我想让搜索函数对表中所有元素进行搜索。不仅仅是实际展示的那些。下面是我的搜索脚本:
<script type="text/javascript">
$(document).ready(function () {
$("#filter").keyup(function () {
// Retrieve the input field text and reset the count to zero
var filter = $(this).val(), count = 0;
console.log(filter);
// Loop through each row of the table
$("table tr").each(function () {
// If the list item does not contain the text phrase fade it out
if ($(this).text().search(new RegExp(filter, "i")) < 0) {
$(this).fadeOut();
// Show the list item if the phrase matches and increase the count by 1
} else {
$(this).show();
count++;
}
});
/* var numberItems = count;
$("#filter-count").text("Number of Comments = "+count);*/
});
});
my HTML page:
<div>
<div id="homeMessage">
Please see below the list of books available.
</div>
<br />
<div id="divCurrentRented">
<form id="live-search" action="" class="styled" method="post">
<fieldset>
<input type="text" class="form-control" id="filter" value="" placeholder="Search by title or author..."/>
<span id="filter-count"></span>
</fieldset>
</form>
</div>
<br />
<div id="divCurrentRented">
@{
WebGrid obj = new WebGrid(Model, rowsPerPage: 5);
}
@obj.Table(htmlAttributes: new
{
id="tableCurrentRented",
@class = "table"
},
headerStyle: "webgrid-header",
footerStyle: "webgrid-footer",
alternatingRowStyle: "webgrid-alternating-row",
rowStyle: "webgrid-row-style",
columns: obj.Columns(
obj.Column("Title", header: "Title"),
obj.Column("Author", header: "Author"),
obj.Column("Avaible", header: "Available", canSort:false),
obj.Column(header: "Rent", format:@<button type="button" class="btn btn-default">Rent it</button>)
))
</div>
<div style="text-align:right">
@obj.Pager(mode: WebGridPagerModes.All)
</div>
<br />
你知道怎么做吗?
HTML:<table id="tableCurrentRented" class="table">
<thead>
<tr class="webgrid-header">
<th scope="col">
<a href="/AuthenticatedUser/SearchBooks?sort=Title&sortdir=ASC">Title</a> </th>
<th scope="col">
<a href="/AuthenticatedUser/SearchBooks?sort=Author&sortdir=ASC">Author</a> </th>
<th scope="col">
Available </th>
<th scope="col">
Rent </th>
</tr>
</thead>
<tbody>
<tr class="webgrid-row-style">
<td>Le Bossu de Notre Dame</td>
<td>Victor Hugo</td>
<td>Yes</td>
<td><button type="button" class="btn btn-default" data-toggle="modal" data-target="#myModal" data-id="9" data-title="Le Bossu de Notre Dame">Yes</button></td>
</tr>
<tr class="webgrid-alternating-row">
<td>Oliver Twist</td>
<td>Charles Dickens</td>
<td>Yes</td>
<td><button type="button" class="btn btn-default" data-toggle="modal" data-target="#myModal" data-id="1" data-title="Oliver Twist">Yes</button></td>
</tr>
<tr class="webgrid-row-style">
<td>Pride and Prejudice</td>
<td>Jane Austen</td>
<td>Yes</td>
<td><button type="button" class="btn btn-default" data-toggle="modal" data-target="#myModal" data-id="5" data-title="Pride and Prejudice">Yes</button></td>
</tr>
<tr class="webgrid-alternating-row">
<td>Sense and Sensibility</td>
<td>Jane Austen</td>
<td>Yes</td>
<td><button type="button" class="btn btn-default" data-toggle="modal" data-target="#myModal" data-id="6" data-title="Sense and Sensibility">Yes</button></td>
</tr>
<tr class="webgrid-row-style">
<td>The Mayor of Casterbridge</td>
<td>Thomas Hardy</td>
<td>Yes</td>
<td><button type="button" class="btn btn-default" data-toggle="modal" data-target="#myModal" data-id="3" data-title="The Mayor of Casterbridge">Yes</button></td>
</tr>
</tbody>
</table>
控制器方法:
public ActionResult SearchBooks()
{
var listBook = datamanager.GetAllBooks();
List<ViewBook> listViewBook = new List<ViewBook>();
foreach (Book b in listBook)
{
ViewBook viewBook = new ViewBook();
viewBook.BookID = b.BookId;
viewBook.Title = b.Title;
viewBook.Author = b.Author;
if (b.Rented ?? true)
{
viewBook.Avaible = "No";
}
else
{
viewBook.Avaible = "Yes";
}
listViewBook.Add(viewBook);
}
return View(listViewBook);
}
我已经成功地将列表的所有模型传递给javascript:
var data = @Html.Raw(Json.Encode(Model));
但是,当我这样做时:
$(数据)。Each (function () {
循环遍历数据的每个元素,我得到这个错误:
不能使用'in'运算符搜索未定义的'不透明度'
你知道怎么解决这个问题吗?
Javascript
$("#filter").keyup(function () {
$.ajax({
type: "GET",
contentType: "application/json; charset=utf-8",
dataType: "json",
url: 'Search?q='+$("#filter").val(),
success:
function (result) {
$("#tableCurrentRented tbody").empty();
$.each(result.Books, function (index, item) {
var cls=(index%2==0)?"webgrid-row-style":"webgrid-alternating-row";
var html = ' <tr class="'+cls+'">'+
'<td>'+item.Title +'</td>'+
'<td>'+item.Author +'</td>'+
'<td>'+item.Avaible +'</td>'+
' <td><button type="button" class="btn btn-default" data-toggle="modal" data-target="#myModal" data-id="'+item.BookID +'" data-title="'+item.Title+'">'+item. +'</button></td></tr>';
$("#tableCurrentRented tbody").append(html);
});
},
error: function (xhr, status, err) {
}
});
});
添加新的方法来搜索控制器
public ActionResult Search(string q)
{
var listBook = datamanager.GetAllBooks().Where(X=> X.Title.Contains(q)).ToList();
List<ViewBook> listViewBook = new List<ViewBook>();
foreach (Book b in listBook)
{
ViewBook viewBook = new ViewBook();
viewBook.BookID = b.BookId;
viewBook.Title = b.Title;
viewBook.Author = b.Author;
if (b.Rented ?? true)
{
viewBook.Avaible = "No";
}
else
{
viewBook.Avaible = "Yes";
}
listViewBook.Add(viewBook);
}
return Json(new { Books = listViewBook }, JsonRequestBehavior.AllowGet);
}
似乎你有一个"模型"变量持有的数据。也许你应该考虑直接过滤模型中的数据,并将过滤后的模型传递给webgrid。问题,我如何理解它,是你试图获取已经呈现的值,而不是考虑渲染过滤数据之前的数据的整个集合。
相关文章:
- 我应该将哪些数据传递给 Spotify 应用程序才能使分页工作
- 数据表中的FixedHead没有'删除分页后无法工作
- HTML分页在第一页上搞砸了,之后它工作正常
- MVC Webgrid,javascript在排序和分页后停止工作
- 智能表分页链接不工作
- GridView客户端分页不工作
- Rails: Javascript不能在分页对象上工作
- 在网页网格表上进行实时搜索,分页仅在实际页面上工作
- 试着学习Angular——为什么这里的分页不能正常工作?
- carouFredSel滑块-上一页,下一页和分页不工作
- 过滤收集后,后网分页器不工作
- Will_paginate分页链接javascript不工作
- 延迟加载不工作与我的自定义分页
- 分页-不工作
- 为什么引导动态表分页不能工作
- AngularJS - ngrid不显示正确的页面大小&分页不工作
- 分页不能正常工作
- Javascript在数据表过滤或分页之后不工作
- 包含分页后,搜索功能无法工作
- Jeasyui DataGrid分页不能正常工作