页面上的复选框加载了XMLhttpRequest

时间:2013-08-08 13:02:34

标签: php javascript html checkbox xmlhttprequest

在我的主页面上,我有一个选项,包括票证状态选项,以及提交按钮和文本区域。我有一张门票列表,每张门票都有一个复选框,列表上会显示有关门票的各种信息。

像这样:

 _________________________________ \
|checkbox|ticket name|user|status| |
|checkbox|ticket name|user|status| |
|checkbox|ticket name|user|status| |
|checkbox|ticket name|user|status| |--> this is on my list.php page
|checkbox|ticket name|user|status| |
|checkbox|ticket name|user|status| |
|________________________________| |
 ___________________________       /
|select status|submit button| \
|___________________________| |
 ___________________________  |--> this is on my main page
|         text area         | |
|___________________________| /

使用“list.php”通过XMLhttpRequest加载票证列表。当我输入文本,然后选择状态,检查我要更新的票据并按提交它将通过POST XMLhttpRequest发送信息并刷新页面。

我的XMLhttpRequest将textarea,状态和提交从我的主页发送到list.php。问题是复选框 - 因为它们在页面list.php上,我不知道如何处理它们。

我在刷新之前检查它们,当我按下提交时,因为它刷新了list.php,发送了新的数据,复选框被重置,我无法获得被检查的那个。我希望重置复选框,但只有在我的请求完成后才能重置。

有什么想法吗?

我在Pastebin上发布了我的两个页面的简化示例:

1 个答案:

答案 0 :(得分:1)

您可以使用JavaScript& amp; jQuery的

注意:此代码未经测试,您将指向正确的方向,但可能会出现语法错误或与您的代码不符。

首先,将您的AJAX调用交换为jQuery POST方法

你已经在你的简化页面中包含了jQuery,所以当你可以使用简单的jQuery来执行POST请求时,不要使用那些回旋的XMLHttpRequests(通常你会在较少的行上执行此操作但是我'把它隔开,这样更容易阅读):

function reloadList(statuses) {
    $.post(
        'list.php',
        {
           'data': some-variable,
           'more-data': some-other-variable 
        },
        function(data,status) {
           $('#list').html(data);
           restoreCheckedStatus(statuses);
        }
    );
}

您需要填写POST数据。

接下来,我们需要一个功能来保存这些复选框的状态

使用jQuery选择器,我们将迭代页面上的每个复选框并存储它是否在数组中被选中:

function saveCheckedStatus() {
    var statuses = new Array();
    $(':checkbox').each(function(){
        // Store the checkbox ID and checked status in an array
        var cbox = new Array();
        var cbox['id'] = $(this).attr('id');
        var cbox['checked'] = $(this).is(':checked');
        statuses.push(cbox);
    });
    return statuses;
}

我们还需要一个功能来恢复这些状态

在此之后,我们将创建一个函数来从输入数组中恢复这些状态:

function restoreCheckedStatus(statuses) {
    for(var cbox in statuses) {
        // Set a checkbox checked or unchecked based on ID
        $('#'+cbox['id']).attr('checked', cbox['checked']);
    }
}

最后,将它们全部放在一起

现在,我们需要等待某人点击“提交”按钮,然后按正确的顺序执行以上所有操作:

$('#submit').click(function(){
    var statuses = saveCheckedStatus();
    reloadList(statuses);
});

这应该可以解决你的问题。如果你根据这种语法让它工作,请让我知道任何错误,以便我可以编辑我的答案,以便将来有用。