【问题标题】:Checkboxes on page loaded with XMLhttpRequest加载了 XMLhttpRequest 的页面上的复选框
【发布时间】:2013-08-08 22:19:17
【问题描述】:

在我的主页上,我有一个选择工单状态选项、一个提交按钮和一个文本区域。我有一张票列表,每张票都有一个复选框,列表上显示了有关票的各种信息。

像这样:

 _________________________________ \
|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         | |
|___________________________| /

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

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

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

有什么想法吗?

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

【问题讨论】:

  • 问题所在并不完全清楚(至少对我而言)。如果你能写出更短的句子,更清晰的描述,那可能会有所帮助。您似乎正在通过 AJAX 请求为各种复选框加载 HTML,这些复选框正确显示。然后,一旦表单完成,您就可以通过另一个 AJAX 请求发送表单的内容。问题在于第二件事。对吗?
  • 我的问题是,当我检查要更新的票证时,我在请求完成之前单击提交重置的复选框。因为请求是在刷新list.php之后完成的,并且复选框在这个页面上。

标签: php javascript html checkbox xmlhttprequest


【解决方案1】:

你可以用 JavaScript 和 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);
});

这应该可以解决您的问题。如果您根据此语法使其正常工作,请让我知道任何错误之处,以便我可以编辑我的答案以备将来使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-27
    • 1970-01-01
    • 2016-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-19
    • 1970-01-01
    相关资源
    最近更新 更多