【问题标题】:hidden inputs with same name: how to send only the values of selected checkboxes?具有相同名称的隐藏输入:如何仅发送选定复选框的值?
【发布时间】:2017-07-11 07:50:35
【问题描述】:

我们有许多复选框链接到具有相同名称的几个隐藏字段。我们怎么能只发送选中复选框的值?

php

<input type"checkbox" name="<?echo $filename;?>_<?echo $variable;?>"
id="filename_<?echo $variable;?>" value="1">

<input type="hidden" name="item_<?echo $filename;?>" 
value="<?echo $quantity;?>">

如果选择了两个或多个具有相同名称的复选框,那么我们如何才能为每个隐藏的输入获得正确的值,而不是总是获得最后一个的值?

我们生成的 html

<input type"checkbox" name="idfilename_1"
<input type="hidden" name="item_idfilename" value="7">

<input type"checkbox" name="idfilename_2"
<input type="hidden" name="item_idfilename" value="5">

<input type"checkbox" name="idfilename_3"
<input type="hidden" name="item_idfilename" value="11">

【问题讨论】:

  • 也可以使用item_idfilename1 item_idfilename2 ...

标签: javascript php jquery html checkbox


【解决方案1】:

一般都是这样的

<input type"checkbox" name="idfilename_1">
<input type="hidden" name="item_idfilename_1" value="7">

只有选中的一次才会在 POST 数组中有一个字段/索引。

在 PHP 端,从选中的复选框中获取字段。

如果知道例如 array_key 存在,例如idfilename_1 然后你可以从$_POST['item_idfilename_1'] 中获取值,如果不离开它。

记住:只有选中的复选框才会在 POST 数组中有一个字段!

【讨论】:

  • 当您可以使用数组并提供更多灵活性时,使用“编号”变量总是一个错误的决定。
  • @Michael Di Prisco 我现在,但在我的示例中,您不能使用 idfilename[],因为您不再在服务器端获得与 item_idfilename_ 字段的关系。
  • 您可以通过将键放在括号中。在OP的循环中,我们有一个变量叫$variable,它是唯一且增量的,所以我们可以使用这样的变量作为数组键。
  • @Michael Di Prisco 这只是一个示例和即时答案,我会以其他方式进行。所以我在这里简单了。我真的不知道他为什么要为此使用 2 个输入.....
  • @Michael Di Prisco 和 bad decision 在 php/html 世界中并不总是 wrong answer ;-)
【解决方案2】:

我使用next()获取下一个节点值

$('[type~=checkbox]').change(function(){
  alert($(this).next().val());
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="checkbox" name="idfilename_1">
<input type="hidden" name="item_idfilename" value="7">

<input type="checkbox" name="idfilename_2">
<input type="hidden" name="item_idfilename" value="5">

<input type="checkbox" name="idfilename_3">
<input type="hidden" name="item_idfilename" value="11">

【讨论】:

    【解决方案3】:

    你可以像这样创建一个数组:

    <input type="checkbox" name="item_idfilename[]" value="7">
    <input type="checkbox" name="item_idfilename[]" value="5">
    <input type="checkbox" name="item_idfilename[]" value="11">
    

    这样您将获得选中复选框的列表。

    【讨论】:

      【解决方案4】:

      您可以将数组用于复选框和隐藏项。 拥有名为 check[1]、check[2]、check[3] 的复选框和名为 item_hidden[1]、item_hidden[2] 等的隐藏项。您可以将每个复选框与隐藏的输入相关联。

      所以你的输出将是:

      <input type"checkbox" name="idfilename[1]" value="1">
      <input type="hidden" name="item_idfilename[1]" value="7">
      
      <input type"checkbox" name="idfilename[2]" value="1">
      <input type="hidden" name="item_idfilename[2]" value="5">
      
      <input type"checkbox" name="idfilename[3]" value="1">
      <input type="hidden" name="item_idfilename[3]" value="11">
      

      服务器端,您将循环 idfilename,如果设置了值(因此复选框已被选中),您将从 item_idfilename 数组中获取值。

      【讨论】:

      • 我必须这样做:您的答案显示了带有 1 的输入字段,我认为这不是 OP 在真实网页上想要的,请检查语法 ;-)
      • @JustOnUnderMillions 它与任何与问题相关的事情有什么关系?
      • 如果您的代码未更改使用,将无法工作,因为缺少=。我也不想粗鲁:-)
      • 我觉得@nvisser 在这里有最好的解决方案(只有一个输入解决方案)。祝你有美好的一天。
      • 我只是看不到错误。没有缺少等号。复选框的 value=1 仅用于服务器端检查。他不必使用该值,但隐藏字段之一.. OP 要求提供一种解决方案,该解决方案允许他同时拥有复选框和隐藏字段,因此他可能无法使用 @nvisser 解决方案。
      【解决方案5】:

      试试这个:

        var $checkedInput = $('input[type=checkbox]:checked');
        if($checkedInput){
              var hiddenValue= $checkedInput.next('input[type=hidden]').val();
        }
      

      --------------- 或-------

       var $checkedInput= $('input[type=checkbox]:checked').next('input[type=hidden]')
                         .map(function() {
                               return $(this).val();
                         }).get();
      

      根据您的代码,您将获得一个类似["7", "5", "11"] 的数组。

      【讨论】:

      • 错误的决定。尽可能避免使用 jQuery,并使用与浏览器一致和执行的方法,例如跨浏览器输入数组命名。
      • 您的解决方案似乎很有希望,但脚本似乎不起作用。我们错过了什么吗? :-) 有什么调整吗?
      猜你喜欢
      • 1970-01-01
      • 2012-01-01
      • 1970-01-01
      • 2021-10-31
      • 2013-11-02
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多