1

我的应用程序将用户的电话号码作为输入并将它们存储在数据库中。在一个单独的页面上,我们要求用户检查应该对其他用户可见的电话号码。请不要问任何关于我们为什么要这样做的问题,因为这样做是出于与此问题无关的一些商业原因。

现在,我正在尝试显示这些电话号码并要求用户检查那些应该可见的电话号码或取消选中他之前检查过的电话号码。我有以下未解决的问题:

  1. 当用户提交表单时,我不知道他的电话号码是什么。如何将复选框与电话号码关联?
  2. 如果我使用隐藏字段,给这些输入字段,它们对应的电话号码作为 ID 是否是标准做法?
4

2 回答 2

1

假设没有电话号码重复,最简单的方法是将每个复选框的值设置为其关联的电话号码:

0262543210 <input type="checkbox" name="makeVisible" value="0262543210">
0265511223 <input type="checkbox" name="makeVisible" value="0265511223">
0398123456 <input type="checkbox" name="makeVisible" value="0398123456">

(显然你会添加某种格式,表格或无序列表或其他东西。)

然后在您的服务器端代码中处理每个makeVisible(或您给它的任何名称)值,请记住只有选中的那些会被提交。此方法不需要 JavaScript。

如果您想为每个数字提交一个是/否或真/假(可见/隐藏)值,那么 no-JS 方法就是使用单选按钮。但是使用复选框最简单的方法可能是根据复选框状态设置隐藏字段:

<table>
  <tr>
    <th>Phone Number</th>
    <th>Make visible?</th>
  </tr>
  <tr>
    <td>0262543210</tr>
    <td>
       <input type="hidden" name="number" value="0262543210">
       <input type="hidden" name="makeVisible">
       <input type="checkbox" class="numbervisibility">
    </td>
  </tr>
  <tr>
    <td>0265511223</tr>
    <td>
       <input type="hidden" name="number" value="0265511223">
       <input type="hidden" name="makeVisible">
       <input type="checkbox" class="numbervisibility">
    </td>
  </tr>
  <!-- etc. -->
</table>

如果需要,添加带有记录 ID 的其他隐藏字段,或者使用记录 ID 而不是电话号码 - 任何适合您的数据结构的内容。

然后在复选框更改时使用一些简单的 jQuery 设置隐藏值:

$(".numbervisibility").click(function() {
    $(this).closest("td").find('input[name="makeVisible"]').val(this.checked ? "Y" : "N");
});

这样,在服务器端,您最终会得到具有数字和相关可见性设置的匹配字段数组。

请注意,如果您使用的是 PHP,则应[]在末尾为重复字段命名,例如"makeVisible[]".

(当然,在任一解决方案中,您都可以使用服务器端代码将电话号码注入 html。)

于 2013-01-28T00:18:36.677 回答
0

好吧,当您提交页面时,您肯定会将数据作为 PhoneNumber/Show 对的集合发送到后端处理代码(无论是什么平台),并基于此将它们创建到数据库中(无论如何您都这样做) ),根据给定对的数据设置 Show 标志。

即在 jquery 中(假设你没有使用我建议你这样做的敲除之类的数据绑定框架)当用户单击提交按钮时,你将 $().each 包含 CheckBox/Phone 的所有容器编号元素并构造一些 JSON 来发送,如下所示:

{
   UserID:xxx,
  [{PhoneNumber:12345,Show:true},
  {PhoneNumber:999,Show:false}]
}

然后发送它,但是您通常会发送您的数据

然后在服务器端,你有一个相应的类来接收这些信息,遍历它并在数据库中做任何需要做的事情,如果它不存在则创建它,如果它存在则更新它等等。

还是我错过了什么?您能否提供更多有关平台的信息、应用程序如何呈现页面(本机、html5)、您当前如何将数据发送到服务器等?

于 2013-01-28T00:14:22.517 回答