问题描述
从数据库中读取出N条记录
每条记录都对应一个按钮
使用Jquery为每个按钮增加一个单击事件
单击按钮
所在行要进行更新的单元格数据
变成输入框可以更新所在行的数据
JavaScript文件代码
[code="js"]
$(document).ready(function() {
// 为修改按钮注册单击事件
var modifies = $(".modify");
for (var i =0; i < modifies.length; i++) {
$(modifies[i]).click(function() {
// 定位该修改按钮所在表单中typeName所在Td位置
// 注:查找的是Id
alert(i);
var typeName = "#" + (i+1) + "_typeNameCn";
var typeNameTd = $(typeName);
// 保存单元格中的数据
var text = typeNameTd.text();
// 清空td里面的内容
typeNameTd.empty();
alert(text);
// 建立一个文本框,即一个input的元素节点
// 注:name属性的命名要和action中的命名一致
var input = $("<input type=\"text\" name=\"mt.typeNameCn\" />");
// 设置文本框的值是保存起来的文本内容
input.attr("value", text);
// 将文本框中的内容加入到td中
typeNameTd.append( input );
// 隐藏"修改"按钮
$(modifies[i]).css("display","none");
// 找到提交按钮,让提交按钮显示出来
var submit = "#" + i +"_submit";
$(submit).css("display","block");
});
}
});
[/code]
jsp文件代码
[code="java"]
杂志类型编号 | 杂志类型名称 | 操作 |
修改 |
[/code]
问题:当我单击按钮之后,经过断点测试发现
for循环中的i变量不是0而是2
也就是说局部变量在完成循环之后
并没有从内存中清除
而是保留了下来
继续递增
不知道这样的描述是否正确
请帮忙告知如何解决
谢谢
[b]问题补充:[/b]
是的每次都是打印的2
就是i最后一次参与循环的值
[b]问题补充:[/b]
我是新来的
感觉自己提出的问题自己不能回答
就做问题补充了
高手别见怪啊
each方法比较好
进行遍历效果不错
但是我想实现的是
"为查找到的所有按钮添加单击事件"
如何做呢?
我使用上面我写的方法为每个按钮添加了单击事件
但是
i的值不变了
执行上面的JS代码
如果i的值不变的话
相当于为多个按钮
注册了相同的单击事件
我的目的是
通过单击按钮直接更新 "相应" 的数据记录
[code="$"]$(".modify").each(
function(i){
# $(modifies[i]).click(function() {
}
);[/code]
请问一下,你点的是第几条记录的按钮?
难道点每条记录的按钮,i都是2?
试着看一下各条记录的i都是多少吧
直接改成
[code="$"]$(".modify").each(
function(i){
}
);[/code]
楼主不像是那么不细心的人 - -
所以一楼的怀疑我忽略了。
刚才又看了一下你的代码,有点明白为什么一直是2了
下面一段代码一看就明白了
[code="java"]
var a=2;
$("#id").click(function() {
alert(a);
}
[/code]
这时候调用click可以弹出2,也就是说,对象a被传入到function中了
在你的代码中,外部的循环体最终把i变为了2,因此每个click方法中的i对象都是2了
我对jsp不是很熟,只能给个大概的思路
方案一:每次调用click方法的时候,传入id参数,即生成的jsp为
[code="java"]
修改
[/code]
之类的代码
方案二:在click方法中,利用和button的相对位置,或者给button一个id,当场从jsp中获取id,而不是从外部传进来
ps:建议调试前台页面用firefox的firebug插件,而不是用原始的alert方法,可以节省很多时间
# $(modifies[i]).click(function() {
复制时候出错了。这句改成 $(this).click(function(i) {