如何在jQuery中删除所选消息(带复选框)?

时间:2011-11-03 21:24:13

标签: javascript jquery mysql ajax

我正在建立一个消息系统,它有很多AJAX。我正在尝试使用复选框添加批量操作功能。我添加了复选框,但我的问题是我不知道如何使选定的消息发生。

这是我的功能,只要点击一个复选框就会发生:

function checkIt(id) {
    if ($('#checkbox_' + id).is(':checked')) {
        $('#' + id).addClass("selected");
    }
    else {
        $('#' + id).removeClass("selected");
    }
}

但是,我不知道从那里去哪里。

enter image description here

以下是消息列表中[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请求中发送的所有内容?我知道它必须与数组有关,但我只是不知道执行此操作的代码。

提前致谢!

2 个答案:

答案 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);
    }
});