小弟我在学jquery绑定事件时遇到点麻烦,恳请高手指点下。
代码如下
var ApageTotal; //总页数
var Atotal ; //记录数
....
function setPageUp(pNum){
$("#p_b_total").html('共'+Atotal +'条记录 第'+pNum+'/'+ApageTotal+'页')
$("#p_b_list li").remove();
if(pNum!==1){
var starStr = $('<li ><a href="void(0)">首页</a></li>').bind("click",function(){getPage("accounts",1);return false;});
$("#p_b_list").append(starStr);
}
var upStr = $('<li><a href="void(0)">上一页</a></li>').bind("click",function(){getPage("accounts",(pNum)-1<1?1:(pNum)-1);return false;});
$("#p_b_list").append(upStr);
var cycleNum =pNum+5; // 每次显示5页
cycleNum = (cycleNum >ApageTotal)?ApageTotal:cycleNum; //如果循环的页数值大于总页数。则显示当前页到最后一页
///////有问题的地方在这里
for(var i = pNum;i<cycleNum;i++){
var listStr =(i==pNum)?$('<li class="wzpdang"><a href="void(0)" class="'+i+'">'+i+'</a></li>').bind("click",function(){getPage("accounts",i);return false;}):$('<li><a href="void(0)" class="'+i+'">'+i+'</a></li>').bind("click",function(){getPage("accounts",i);return false;});
$("#p_b_list").append(listStr);
}
////////////往下的代码调试无异常
var downStr = $('<li><a href="void(0)">下一页</a></li>').bind("click",function(){getPage("accounts",(pNum)+1>ApageTotal?ApageTotal:(pNum)+1);return false;});
$("#p_b_list").append(downStr);
if(pNum!==ApageTotal){
var endStr = $('<li><a href="void(0)">末页</a></li>').bind("click",function(){getPage("accounts",ApageTotal);return false;});
$("#p_b_list").append(endStr);
}
}
function getPage(type,pageNum){这里是获取分页的记录}原谅我不会贴本地图片
初始显示
上一页1 2 3 4 5下一页 末页
当我点1,即第一页是,传递的参数是 i=1,即应该执行getPage("accounts",1),可实际上执行的是getPage("accounts",6),我觉得执行的是for循环后,绑定的最后一个匿名函数。
请高手指点下,该怎么传参数呢?
谢谢
代码如下
var ApageTotal; //总页数
var Atotal ; //记录数
....
function setPageUp(pNum){
$("#p_b_total").html('共'+Atotal +'条记录 第'+pNum+'/'+ApageTotal+'页')
$("#p_b_list li").remove();
if(pNum!==1){
var starStr = $('<li ><a href="void(0)">首页</a></li>').bind("click",function(){getPage("accounts",1);return false;});
$("#p_b_list").append(starStr);
}
var upStr = $('<li><a href="void(0)">上一页</a></li>').bind("click",function(){getPage("accounts",(pNum)-1<1?1:(pNum)-1);return false;});
$("#p_b_list").append(upStr);
var cycleNum =pNum+5; // 每次显示5页
cycleNum = (cycleNum >ApageTotal)?ApageTotal:cycleNum; //如果循环的页数值大于总页数。则显示当前页到最后一页
///////有问题的地方在这里
for(var i = pNum;i<cycleNum;i++){
var listStr =(i==pNum)?$('<li class="wzpdang"><a href="void(0)" class="'+i+'">'+i+'</a></li>').bind("click",function(){getPage("accounts",i);return false;}):$('<li><a href="void(0)" class="'+i+'">'+i+'</a></li>').bind("click",function(){getPage("accounts",i);return false;});
$("#p_b_list").append(listStr);
}
////////////往下的代码调试无异常
var downStr = $('<li><a href="void(0)">下一页</a></li>').bind("click",function(){getPage("accounts",(pNum)+1>ApageTotal?ApageTotal:(pNum)+1);return false;});
$("#p_b_list").append(downStr);
if(pNum!==ApageTotal){
var endStr = $('<li><a href="void(0)">末页</a></li>').bind("click",function(){getPage("accounts",ApageTotal);return false;});
$("#p_b_list").append(endStr);
}
}
function getPage(type,pageNum){这里是获取分页的记录}原谅我不会贴本地图片
初始显示
上一页1 2 3 4 5下一页 末页
当我点1,即第一页是,传递的参数是 i=1,即应该执行getPage("accounts",1),可实际上执行的是getPage("accounts",6),我觉得执行的是for循环后,绑定的最后一个匿名函数。
请高手指点下,该怎么传参数呢?
谢谢
解决方案 »
- 如何在asp.net网页中自做讯播播放器来看电影
- 实现图片放大功能只能对一张起作用,不能多张图片同时起效果
- 正则表达式,求解
- 如何用javascript操作xml排序输出
- ***************有WebIM的开源项目吗*****************************
- 如何让window.open打开的页面获得原页面的cookies?
- 把一个页面自动另存为一个指定html页面,怎么样实现,我知道document.execCommand('SaveAs')命令,但他会弹出一个保存对话框
- 再来菜鸟问题
- 如何让一个div层,在下拉列表时把他的css样式变成另外一个,从而实现让某个div一直显示在页面导航部位
- npm install 命令必须要在特定结构的目录下使用才有效果吗?
- 请问这个如何onload
- 求解 PHP JS批量删除问题!!!
问题出在所有的click绑定的都是 在i循环到最大值 即i = pNum +5时的匿名函数
alert(event.data.foo);
}
$("p").bind("click", {foo: "bar"}, handler)
这种方式来传参数,新加个函数来接受点击时取到的参数,再调用getPage(type,pageNum)就行了
function annousDate(event){
...
for(var i = pNum;i<cycleNum;i++){ var listStr =(i==pNum)?$('<li class="wzpdang"><a href="#" class="'+i+'">'+i+'</a></li>').bind("click", {account: "accounts",num:i}, annousDate,function(){return false;}):$('<li><a href="#" class="'+i+'">'+i+'</a></li>').bind("click", {account: "accounts",num:i}, annousDate,function(){return false;});
$("#p_b_list").append(listStr);
}
....
var pageNum = event.data.num;
var type =event.data.account;
getPage(type,pageNum);
}
var message = 'Spoon!';
$('#foo').bind('click', function() {
alert(message);
});
message = 'Not in the face!';
$('#bar').bind('click', function() {
alert(message);
});由于这两个函数在他们各自的环境中都有message,所以触发时显示的消息都是 Not in the face! 。变量值被改变了。为了回避这个问题,我们可以把message变量作为data参数传递进去:
var message = 'Spoon!';
$('#foo').bind('click', {msg: message}, function(event) {
alert(event.data.msg);
});
message = 'Not in the face!';
$('#bar').bind('click', {msg: message}, function(event) {
alert(event.data.msg);
});这时在函数内部不再直接指向这个变量了;取而代之的是按值传递给了data参数,他能保持绑定事件时的值。第一个函数现在会显示Spoon!,而第二个则显示Not in the face! 注意,如果这个对象按引用传递给了函数,那么将会使情况变得极其复杂。