给ajax动态生成的页面元素循环绑定事件

给ajax动态生成的页面元素循环绑定事件

在写项目的时候,使用ajax动态生成了页面元素,但是同时需要给动态生成的页面元素绑定事件,百度了半天没找到理想的答案,于是自己写下怎么解决的。


ajax动态生成的元素

$("#sub").click(function(){
    var bodydata={
            svrCustName : $("#svrCustName").val(),
            svrType     :$("#svrType").val(),
            svrStatus   : $("#svrStatus").val()                
    }       
    $.ajax({
        type:'POST',
        url:"${pageContext.request.contextPath}/CstService/1/2",
        data:bodydata,
        success:function(result){
            lastnum=result.lastPage;
            var str ;
            var datalist = result.list;     
            for(var i in datalist){                     
            str +=  "<tr>"+
                    "<td class='list_data_number' id='id"+i+"'>"+datalist[i].svrId+"</td>"+
                    "<td class='list_data_text'>"+datalist[i].svrCustName+"</td>"+
                    "<td class='list_data_ltext'>"+datalist[i].svrDueTo+"</td>"+
                    "<td class='list_data_text'>"+datalist[i].svrRequest+"</td>"+
                    "<td class='list_data_text'>"+datalist[i].svrCreateBy+"</td>"+                      
                    "<td class='list_data_text'>"+"<form id='formTest' method='post' action='#'>"+"<input  name='svrDeal' id='svrDeal"+i+"'/>"+"<input type='button' id='inner"+i+"' value='提交处理'>"+"</form>"+"</td>"+                                      
                    "</tr>";                                                

            }
            $("#ajaxtest").html(str);              
        },
        dataType:"json" ,                   
    })  
})
for(var i=0;i<2;i++){
    //把变量i传给on方法,在方法内使用event.data来接收,这样就可以解决使用for循环 i不变的问题
    $("#ajaxtest").on("click","#inner"+i,{key:i},function(event){
        var svrId ="#"+"id"+event.data.key;
        var svrRe="#"+"svrDeal"+event.data.key;         
        var bodydata={
                svrId:$(svrId).text(),
                svrResult:$(svrRe).val()               
        }
        $.ajax({
            type:'POST',
            url:"${pageContext.request.contextPath}/dispatchUpdateRequest",    
            datatype:"json",
            data:bodydata,
            success:function(){             
                alert("提交处理")
            }                       
        })
        })
      } 

我需要对按钮 id=”inner”+i,绑定一个click事件,同时也要获取动态生成的元素中的值:
我们知道对于动态元素使用on()方法,但是有一个最大的问题是使用for循环来实现对多个元素循环绑定事件时,你会发现在拼接的字符串变量中,变量i的值始终是数组length+1;对于这个问题度娘上的回答是for循环中的变量i 默认是全局变量,而子函数的变量没有i,所以只能引用全局变量i的值,这样这个i值 就是循环结束后的那个i。

好像听起来有点费解吗,没事解决的方法很简单
    把for循环中的变量i 传给了 on()方法,这个参数会使用event.data来接收,如果对这点有疑惑的可以查阅jquery的帮助手册里面讲的很详细。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值