【问题标题】:Way to re-populate checkboxes on page?在页面上重新填充复选框的方法?
【发布时间】:2014-03-01 02:12:41
【问题描述】:

我有一些奇怪/独特的情况,我目前正在寻找一种方法来“重新填充”我的页面上的复选框。

首先了解页面/应用程序如何工作的背景。

1.) state1:​​你得到简单的搜索表单。输入第一个或最后一个或状态等,点击提交。 它查询数据库并返回到 SAME Page (?mode=results)。

在 MAIN 容器 DIV 内部,我遍历返回的记录,并创建(回显)具有特定表格布局的 TABLE 以解析每个记录/行的值(名称、日期、ID# 等)。

如果我有 5 条从 DB 返回的记录,我会循环创建 5 个表,然后依次创建 5 个表,并使用记录/行中的唯一数据填充每个表。

在我创建的每一个表中,以及来自数据库记录/行的数据。我还创建/添加了几个复选框。

使用一些 jQuery 并在 $(document).ready 上,我监听了所有这些复选框的 onClick 事件。因此,当单击时,我会从复选框中获取一些数据以及一些父信息,然后执行以下操作:

a.) 我在舞台上创建/添加另一个元素
b.) 对外部 .php 脚本进行 Ajax 调用,以便我可以使用我构建的数组更新 SESSION(收集所有用户检查/输入)

我在 JS/jQuery 中构建数组并使用 Ajax 调用将这些数据获取到我的 PHP 会话中(任何人都知道不使用这个外部 .php 脚本来更新 SESSION var 的方法,请告诉我!)

因此,到目前为止,重新总结一下:没有“FORM”(标签),只有多个表格中的复选框。确实没有一键(提交)事件可以一次在任何地方发布所有复选框数据。每次单击(或未单击)复选框时,我都会更新我的 SESSION 数组。如果/当用户准备“签出”(因为没有更好的术语)(离开页面并转到另一个页面),SESSION 数据/数组是“当前的”并且数据准备好在任何以下页面。

到目前为止,上面发布的所有内容都运行良好。

我的问题是:如果用户想要返回带有所有复选框的主页面,我必须重新填充所有这些复选框有什么好的、简单/优雅的解决方案?

我在想我唯一的方法是在主页加载时检查并查看此 SESSION 数组是否存在(这意味着它是重新访问,而不是第一次),并尝试遍历此数组并以某种方式定位我舞台上的元素找到正确的表格,然后是复选框ID?

通常使用 jQuery 来遍历 DOM - 而不是 PHP? 那么用 PHP 切换复选框呢?

有什么好的方法吗?

【问题讨论】:

  • 文字的圣墙...请尝试将其简化为您要解决的确切问题。
  • 已发布问题,但如果没有背景摘要,您可以将其放在上下文中。 (无论如何谢谢)

标签: php checkbox populate


【解决方案1】:

我真的没有看到你的问题。我回顾一下:

  • 您有一个页面,其中包含来自您的数据库的多个 <table>(1 行 = 1 <table>
  • 在这些表格中,您有复选框
  • 当您点击一个复选框时,您会执行一个 ajax 调用以将点击的复选框保存在会话中
  • 您的问题是:当页面再次使用时,如何重新填充复选框

我想您已经有了答案:只需使用您在会话中存储的内容即可。当您构建 <table> 和复选框时,测试它们是否在会话中:

<input type="checkbox" <?php if (!empty($_SESSION['blabla'][$myCurrentCheckboxID])) echo 'checked'; ?> />

如果您想要更优雅的东西,只需创建一个不错的 PHP 类或函数列表来生成您的复选框。

【讨论】:

  • 那是我目前的思考过程..但是 checkboxID 并不是真正独特的......它们对于那个表来说是独一无二的......但其他表完全相同..唯一的区别是表有一个唯一的 ID... 使用您的建议,它不会打开/检查任何/所有具有(例如)ID 的复选框:文章
  • 更不用说它是一个保存在我的会话中的数组。不仅仅是单个变量/值。我已经向数组添加了 3 个值,希望当我最终弄清楚如何时它们会有所帮助重新检查以前的复选框.. 这是我正在构建的 ARRAY 结构.. 最终将这个 ARRAY 保存到我的 SESSION..
  • userPicks.push({recordid:resultsID, orderid:orderID, checkboxid:targetCheckbox, casename:caseName, fullname:fullName, trialdate:trialDate, citystate:cityState, 原告:plaintiff, itemsordered:itemsOrdered=[ {名称:itemOrdered,价格:itemPrice}]});我觉得我需要做这个'倒退'还是什么?遍历数组,然后设置复选框..而不是在解析时尝试检查检查状态(如您的示例中),否则我将有一些运行 for 循环的长 php sn-p ..等等。在每个复选框元素中?
【解决方案2】:

感谢您的建议..这最终对我有用(到目前为止)

function sessionCheck($recordID, $checkBoxID){
    for($r = 0; $r< count($_SESSION['userPicks']); $r++){
        if($_SESSION['userPicks'][$r]['recordid'] == $recordID){
            for($z=0; $z < count($_SESSION['userPicks'][$r]['itemsordered']); $z++){
                if($_SESSION['userPicks'][$r]['itemsordered'][$z]['name'] == $checkBoxID){
                    return 'checked="checked"';
                }else{
                    return "";
                }
            }
        }else{
            return "";
        }
    }
}

我的项目的用法是这样的:

 <?=sessionCheck($row["id"] ."-A","Testimonial History") ?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多