问题:jquery绑定的事件对ajax刷新出的数据不生效
方法:可以用 jquery 里面的 on 和 delegate 预绑定父元素就可以触发的。
注意:某些限制下,个人用的是jquery 1.4.2版本,还不能更新到 1.7版本,on 绑定是报错的,用 delegate 可以的。
on对jquery 看网上资料是需要 1.7以后版本才支持,具体没试验。
案例:
搜索新数据,调用choic.php 将key传过去获取搜索内容返回到arcz里面。将 arcz 里面新刷新出来的选中的 复选框 一旦选中添加到 arcx里面去
(可以多次搜索添加,将最后arcx 里面的值统一调用就好)
搜索:<input type='input' name='key'> <input type='submit' value='提交' id='xuan'>
<ul id='arcz'>
<li><input name='checkarc' type='checkbox'>111</li>
<li><input name='checkarc' type='checkbox'>222</li>
<li><input name='checkarc' type='checkbox'>333</li>
</ul>
<ul id='arcx'>
</ul>
<script type="text/javascript">
$("#arcz").delegate("input","change",function(){
if($(this).is(':checked')){
var v = $(this).val();
var txt = $(this).parent('li').text();
$("#arcx").append('<li><input type="checkbox" name="checkarc" value="'+v+'" checked="checked">'+txt+'</li>');
}
});
</script>
<script type="text/javascript">
$('#xuan').click(function(){
var key = $('input[name="key"]').val();
$.post(
'choice.php',
{'key':key},
function(msg){
$("#arcz").empty();
var x = eval('('+msg+')');
$.each(x,function(i,m){
$("#arcz").append('<li><input type="checkbox" value="'+m.id+'">'+m.title+'</li>');
})
}
);
})
</script>
其他知识点:
1、$(this).is(':checked') 判断是选中事件,change包括选中和取消选中。
2、获取选中元素及过滤js 数组 重复元素(本文字下面)
最后获取 arcx 里面 str 值:
var arr = new Array();
$('#arcx input[name="checkarc"]').each(function(i){
if(this.checked==true){
arr.push($(this).val());
}
});
var new_arr=[];
//去jquery重复数组元素
for(var i=0;i<arr.length;i++){
var items=arr[i];
if($.inArray(items,new_arr)==-1){
new_arr.push(items);
}
}
var str = new_arr.join(',');