iteye_12067
2010-05-11 15:03 阅读 383

Jquery循环添加事件问题

jquery异步加载获得json一个list对象.
写了个for循环
[code="java"][
function loadUsers(json) {
var obj = JSON.parse(json);
var list = obj.list;
for (var i = 0; i < list.length; i++) {
var id = list[i].id;
var truename = list[i].truename;
var type = list[i].type;

    $("#inserthtml").after("<tr><td>" + truename + "</td><td><input type='radio' id='" + id + "_A' name='radio_"
            + id + "' value='0'>未激活" + "<input type='radio' id='" + id
            + "_B' name='radio_" + id
            + "' value='1'>管理员<input type='radio' id='" + id
            + "_C' name='radio_" + id + "' value='2'>项目主管"
            + "<input type='radio' id='" + id + "_D' name='radio_" + id
            + "' value='3'>员工 </td><td><a href='/IdeaYapai_20100505/DeleteUserServlet?id=" + id
    + "' onclick='return confirm(\"确定删除?\");' >删除</a></td><td><input type='button' id='updatetype" + id
            + "' value='更新权限'/></td></tr>")


switch (type) {
        case 0 :
            $("#" + id + "_A").attr("checked", "true");
            break;
        case 1 :
            $("#" + id + "_B").attr("checked", "true");
            break;
        case 2 :
            $("#" + id + "_C").attr("checked", "true");
            break;
        case 3 :
            $("#" + id + "_D").attr("checked", "true");
            break;
    }

    $("#updatetype" + id).click(function() {
        $.ajax({
                    url : 'UpdateTypeServlet',
                    cache : false,
                    type : 'post',
                    dataType : 'html',
                    data : 'userid='
                            + id
                            + '&newtype='
                            + $("input[name=radio_" + id + "][checked]")
                                    .val()

                });
    });
}

}
[/code]

问题是:每添加一行

就给里的button添加一个事件,但是这样的事件获得的id和newtype都是最后一个元素的.
请教如何给每一个按钮添加动作事件才能使获得的ID和newtype是目标元素的.
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

7条回答 默认 最新

  • 已采纳
    qwe_rt qwe_rt 2010-05-11 15:33

    补充一下:在button按钮的前面添加一个隐藏域。

    [code="html"]


    "+
    "<input type='button' id='updatetype" + id

    + "' value='更新权限' onclick='updateType()'/>

    [/code]

    ps:用记事本手写代码,可能存在某些语法错误

    点赞 评论 复制链接分享
  • xiaolongfeixiang 拽拽的初行者 2010-05-11 15:13

    [quote]如何给每一个按钮添加动作事件[/quote]
    [b]
    获取ID为inserthtml的元素下的所有 button 元素,然后再添加。试试这样,其中的id参数,可以通过this来获取到[/b]

    [code="js"]
    $("#inserthtml buttion").click(
    function(this){
    //..........
    }

    )[/code]

    点赞 评论 复制链接分享
  • xiaolongfeixiang 拽拽的初行者 2010-05-11 15:14

    写了个错别字,不好意思:
    [code="js"]$("#inserthtml button").click(
    function(this){
    //..........
    }

    )[/code]

    点赞 评论 复制链接分享
  • shuokai shuokai 2010-05-11 15:23

    [code="java"]$("#updatetype" + id).bind("click",function(){
    $.ajax({

    url : 'UpdateTypeServlet',

    cache : false,

    type : 'post',

    dataType : 'html',

    data : 'userid='

    + id

    + '&newtype='

    + $("input[name=radio_" + id + "][checked]")

    .val()

                    }); 
    

    })[/code]

    点赞 评论 复制链接分享
  • shuokai shuokai 2010-05-11 15:24

    每一个ID绑定一个事件, 你直接用CLICK是要循环就执行这个吗?循环就执行可以用,如果要以后用就用绑定事件!

    点赞 评论 复制链接分享
  • xiaolongfeixiang 拽拽的初行者 2010-05-11 15:29

    在function中使用this,来获取id的值
    [code="java"]$("#inserthtml buttion").click(
    function(){
    //..........
    alert(this.id);
    }

    )[/code]

    点赞 评论 复制链接分享
  • qwe_rt qwe_rt 2010-05-11 15:30

    [b]你那种写法jquery不支持;[/b]

    [b]解决办法是:将click事件写在button里面,[/b]如下:

    [code="html"]


    "+
    "[/code]

    [b]如下updateType方法的实现:[/b]
    [code="JavaScript"]function updateType(){
    var id = $(this).prev().val();
    $.ajax({

    url : 'UpdateTypeServlet',

    cache : false,

    type : 'post',

    dataType : 'html',

    data : 'userid='

    + id

    + '&newtype='

    + $("input[name=radio_" + id + "][checked]").val()

                  });   
    

    }[/code]

    点赞 评论 复制链接分享

相关推荐