实习期间要做一个条件查询和页面优化的需求实现,本着现学现用的做法用了一两天实现了分页,分页的要点在于:
- 当点击下一页时,要把当前的查询条件一起提交到指定 url
- 当点击要显示的页面数量时,要把当前的查询条件一起提交到指定 url
这些查询的条件有 已选的 checkbox, 已经输入的文字等
难点在于在提交请求前怎么获取页面上的这些查询条件
解决这个问题的难点在于如何使用 jquery 来配合 css 中的 tag(如 div,css 等)来进行操作。比如:
- 要获取勾选了的处于 id 为box_multicheck的 checkbox, 可以这样操作:
var boxsSelected=''; $('#box_multicheck input[name="multibox[]"]:checked').each(function(){ boxsSelected+=this.value+","; });
— - 当点击处于 id 为page_select的连接 (<a href=) 时,可以这样写:
$('#page_select a').click(function(){
alert($(this).attr("href"));
});
- 当处于 id 为page_limit下拉选项改变要获取 1 中的 checkbox 和2中的 href 的内容,可以这样做:
$("#page_limit").change(function() {
var boxsSelected='';
$('#box_multicheck input[name="multibox[]"]:checked').each(function(){
boxsSelected+=this.value+",";
});
var ahf=$('#page_select a').attr("href");
alert(hf);
});
知道了上面这些怎么实现,再配合后台的数据交互,问题就好解决了, 下面是自己已经实现了的效果:
完整的代码:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<!-- 新 Bootstrap 核心 CSS 文件 -->
<link rel="stylesheet" href="http://cdn.bootcss.com/bootstrap/3.3.4/css/bootstrap.min.css">
<title>pager demo</title>
</head>
<body>
<?php
//---------------a href start---------------
echo "<center>";
echo "<nav>";
echo "<div id='page_select'>";
echo "<ul class=\"pagination\">";
//---------------multi checkbox start---------------
echo "<div id='box_multicheck'>";
$preChecked=array(2,6); //box checked before
for ($i = 0; $i < 13; $i++) {
$sel=in_array($i,$preChecked)? "checked" : "";
echo " <input type='checkbox' name='multibox[]' {$sel} value='{$i}'><label>{$i}  </label>";
}
echo "</div>";
//---------------multi checkbox end---------------
// echo "<li>
// <a href='#' aria-label='Previous'>
// <span aria-hidden='true'>«</span>
// </a>
// </li>";
$host="http://yii.local/i.php#";
for ($i = 0; $i < 8; $i++) {
echo "<li><a href='{$host}{$i}' >{$i} </a></li>";
}
echo "<li>
<a href='{$host}' aria-label='Next'>
<span aria-hidden='true'>»</span>
</a>
</li>";
//---------------page limit array start---------------
echo "每页<select width='50' style='width: 50px' id='page_limit' name=select_demo[]>";
$psb=30;//page limitation selected before
$pageLimits=array(10,30,50,100);
foreach ($pageLimits as $p){
if ($p==$psb) {
echo "<option selected value=\"{$p}\">{$p}</option>";
}
else{
echo "<option value=\"{$p}\">{$p}</option>";
}
}
echo "</select> 条记录";
//---------------page limit array end---------------
echo "</ul>";
echo "</div>";
echo "</nav>";
echo "</center>";
//---------------a href end---------------
?>
</body>
</html>
<!-- jQuery 文件。务必在 bootstrap.min.js 之前引入 -->
<script src="http://cdn.bootcss.com/jquery/1.11.2/jquery.min.js"></script>
<!-- <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script> -->
<script>
$("#page_limit").change(function() {
var boxsSelected='';
$('#box_multicheck input[name="multibox[]"]:checked').each(function(){
boxsSelected+=this.value+",";
});
var ahf=$('#page_select a').attr("href");
hf="(select change) broswer will jump to:\n "+ahf+"&multibox="+boxsSelected+"&page_limit="+this.value;
alert(hf);
// location.href=hf; /jump to url
});
$('#page_select a').click(function(){
// alert($(this).attr("href"));
var boxsSelected='';
$('#box_multicheck input[name="multibox[]"]:checked').each(function(){
boxsSelected+=this.value+",";
});
var new_url=($(this).attr("href"))+"&multibox="+boxsSelected;
var alert_new_url="(a href)broswer will jump to:\n "+new_url;
alert(alert_new_url);
$(this).attr("href",new_url);
});
</script>
<style type="text/css">
/* use for style optional design */
/* .button { */
/* /* display:inline; */ */
/* margin-left:2px; */
/* /* display: block; */ */
/* width: 25px; */
/* height: 15px; */
/* background: black; */
/* /* padding: 10px; */ */
/* text-align: center; */
/* border-radius: 2px; */
/* color: white; */
/* font-weight: bold; */
/* } */
</style>
</body>
</html>