我正在建立一个消息系统,它有很多AJAX。我正在尝试使用复选框添加批量操作功能。我添加了复选框,但我的问题是我不知道如何使选定的消息发生。
这是我的功能,只要点击一个复选框就会发生:
function checkIt(id) {
if ($('#checkbox_' + id).is(':checked')) {
$('#' + id).addClass("selected");
}
else {
$('#' + id).removeClass("selected");
}
}
但是,我不知道从那里去哪里。
以下是消息列表中[PHP生成]行之一的示例标记:
<div class="line" id="33" >
<span class="inbox_check_holder">
<input type="checkbox" name="checkbox_33" onclick="checkIt(33)" id="checkbox_33" class="inbox_check" />
<span class="star_clicker" id="star_33" onclick="addStar(33)" title="Not starred">
<img id="starimg_33" class="not_starred" src="images/blank.gif">
</span>
</span>
<div class="line_inner" style="display: inline-block;" onclick="readMessage(33, 'Test')">
<span class="inbox_from">Nathan</span>
<span class="inbox_subject" id="subject_33">Test</span>
<span class="inbox_time" id="time_33" title="">[Time sent]</span>
</div>
</div>
如您所见,每一行都将id
属性设置为实际的消息ID。
在上面的函数中,您可以看到我如何检查它。但是,现在我需要做的是当单击“删除”按钮时,发送AJAX请求以删除所有选定的消息。
以下是我目前删除按钮的内容:
$('#delete').click(function() {
if($('.inbox_check').is(':checked')) {
}
else {
alertBox('No messages selected.'); //this is a custom function
}
});
我还将批量标记为已读,标记为未读,删除星标,和添加星标按钮,这样一旦我知道如何进行批量删除工作,我可以用同样的方法来做其他事情。
对于PHP部分,我如何删除使用mysql_query
在AJAX请求中发送的所有内容?我知道它必须与数组有关,但我只是不知道执行此操作的代码。
提前致谢!
答案 0 :(得分:3)
这个怎么样
$('#delete').click(function() {
var checked = $('.inbox_check:checked');
var ids = checked.map(function() {
return this.value; // why not store the message id in the value?
}).get().join(",");
if (ids) {
$.post(deleteUrl, {idsToDelete:ids}, function() {
checked.closest(".line").remove();
});
}
else {
alertBox('No messages selected.'); // this is a custom function
}
});
编辑:作为旁注,您无需生成这些增量ID。您可以消除大量的字符串解析并改为利用jQuery。首先,将消息ID存储在复选框的值中。然后,在给定行的任何单击处理程序中:
var line = $(this).closest(".line"); // the current line
var isSelected = line.has(":checked"); // true if the checkbox is checked
var msgId = line.find(":checkbox").val(); // the message id
var starImg = line.find(".star_clicker img"); // the star image
答案 1 :(得分:2)
假设每个复选框都有父div或td:
function removeDatabaseEntry(reference_id)
{
var result = null;
var scriptUrl = './databaseDelete.php';
$.ajax({
url: scriptUrl,
type: 'post',
async: false,
data: {id: reference_id},
success: function(response)
{
result = response;
}
)};
return result;
}
$('.inbox_check').each(function(){
if ($(this).is(':checked')){
var row = $(this).parent().parent();
var id = row.attr('id');
if (id == null)
{
alert('My selector needs updating');
return false;
}
var debug = 'Deleting ' + id + ' now...';
if (console) console.log(debug);
else alert(debug);
row.remove();
var response = removeDatabaseEntry(id);
// Tell the user something happened
$('#response_div').html(response);
}
});