fengda2870 2009-03-30 18:02 采纳率: 0%
浏览 327
已采纳

jquery 单击事件 局部变量 越界 问题

问题描述
从数据库中读取出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的值不变的话
相当于为多个按钮
注册了相同的单击事件

我的目的是
通过单击按钮直接更新 "相应" 的数据记录

  • 写回答

7条回答 默认 最新

  • iampurse 2009-03-30 23:04
    关注

    [code="$"]$(".modify").each(
    function(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.attr("value", text);

    // 将文本框中的内容加入到td中

    typeNameTd.append( input );

    // 隐藏"修改"按钮

    $(modifies[i]).css("display","none");

    // 找到提交按钮,让提交按钮显示出来

    var submit = "#" + i +"_submit";

    $(submit).css("display","block");

    });

    }
    

    );[/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

悬赏问题

  • ¥15 安装svn网络有问题怎么办
  • ¥15 Python爬取指定微博话题下的内容,保存为txt
  • ¥15 vue2登录调用后端接口如何实现
  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥15 latex怎么处理论文引理引用参考文献