我通过每秒调用的ajax调用动态地将列表项添加到jQuery中的列表中。
以下是ajax调用的代码。
$.ajax({
url: 'php/update_group_list.php',
data: '',
dataType: 'json',
success: function(data) {
var id = data.instructor_id;
group_cnt = data.group_cnt,
group_name = data.group_name,
group_code = data.group_code;
for (i = current_row; i < group_cnt; i++)
{
//setInterval(function() { $('#group-list-div').load('php/group_list.php'); }, 5000);
$('#group-list').append("<li><a href='#' data-role='button' class='view-group-btns' id='"+group_code[i]+"' value='"+id+"' text='"+group_name[i]+"'>"+group_name[i]+"</a></li>");
$('#delete-group-list').append("<fieldset data-role='controlgroup data-iconpos='right'>" +
"<input id='"+group_code[i]+i+"' value='"+group_code[i]+"' type='checkbox' name='groups[]'>" +
"<label for='"+group_code[i]+i+"'>"+group_name[i]+"</label>" +
"</fieldset>");
}
current_row = i;
$('#group-list').listview('refresh');
$('#delete-group-list').trigger('create');
}
});
现在我遇到两个问题
第一个问题:
当我尝试运行下面的代码时(它应显示一个警告框,如果在此行中创建的任何列表项$('#group-list')。blah ... blah在上面的代码中),没有发生的情况。
$(".view-group-btns").click(function()
{
alert("check");
});
第二个问题:
当我尝试发送复选框的表单数据时(在上面的ajax调用代码中引用行$('#delete-group-list')。blah ... blah)帖子返回错误意外令牌&lt ;
我做错了什么?我认为这两个问题是相关的,因为我正在创建动态使用的列表项。
以下是与SECOND问题相关的额外代码
HTML:
<form id='delete-group-form' action='php/delete_groups.php' method='post'>
<h3 style='text-align: center;'>Check the Box Beside the Groups you Would Like to Delete </h3>
<div style='margin-top: 20px;'></div>
<div id='delete-group-list'>
</div>
<div style='margin-top: 20px;'></div>
<input type='submit' id='delete-groups-btn' data-theme='b' value='Delete Groups(s)'>
</form>
JS代码
$('#delete-group-form').submit(function(e)
{
e.preventDefault();
alert($('#delete-group-form').serialize());
if ($('#delete-group-form').serialize() == "")
{
alert('No groups selected to be deleted.')
return false;
}
else
if ($('#delete-groups-form').serialize() == null)
{
alert('No groups selected to be deleted.')
return false;
}
else
{
$.post('php/delete_groups.php',$('#delete-groups-form').serialize()).done(function(data)
{
obj = jQuery.parseJSON(data);
var group_codes = obj.group_list;
alert(group_codes);
alert("The selected groups have been deleted");
window.setTimeout(2000);
return false;
});
}
return false;
});
delete_groups.php
<?php
$group_codes = $_POST['groups'];
$items = array('group_list'=>$group_codes); //creating an array of data to be sent back to js file
echo json_encode($items); //sending data back through json encoding
?>
我认为第二个问题的根源是行$ group_codes = $ _POST ['groups'];特别是$ _POST ['groups']因为当我用$ group_codes ='test'替换它时; (仅用于调试目的),代码按预期工作。
答案 0 :(得分:3)
您需要使用事件委派来使新创建的元素正常运行:
$("#group-list").on("click", ".view-group-btns", function() {
alert("check");
});
答案 1 :(得分:1)
我注意到你在这一行上有3个单引号...在控制组之后错过了一个
$('#delete-group-list')."<fieldset data-role='controlgroup data-iconpos='right'>"
这可以解释意外的令牌&lt;
答案 2 :(得分:0)
你必须在事件上使用jquery。
$(".view-group-btns").on("click", function(event)
{
alert("check");
});
为什么?
因为您只能在DOM更新之前对元素进行常规“点击”。
当你在dom树中动态创建新元素时,你就不能再使用.click了。
on(以及过去,现在不推荐使用的.live())可以监听DOM树中的修改,并可以使用后来创建的元素。
答案 3 :(得分:0)
从ajax调用中获取元素后,必须绑定click函数。 pageLoad事件上的绑定只会绑定到dom中已有的元素。所以做这样的事情。
$.ajax({
success : function(res){
//bind your click function after you update your html dom.
}
})