【问题标题】:submit input text on checked box在复选框上提交输入文本
【发布时间】:2018-04-22 01:23:55
【问题描述】:

我想提交一个表单,在当前行复选框被选中时发布输入文本字段。

当我提交时,我得到了复选框的产品ID,但得到了所有的产品链接。我只想获取相应复选框的输入文本。

我该怎么做?

<form action="process.php" method="post">
    <table>
        <tr> 
            <td><input type="checkbox" name="productId[]" value="<?= $products->id; ?>" /> <input type="text" name="productLink[]" /></td>
        </tr><tr>
            <td><input type="checkbox" name="productId[]" value="<?= $products->id; ?>" /> <input type="text" name="productLink[]" /></td>
        </tr><tr>
            <td><input type="checkbox" name="productId[]" value="<?= $products->id; ?>" /> <input type="text" name="productLink[]" /></td>
        </tr><tr>
            <td><input type="checkbox" name="productId[]" value="<?= $products->id; ?>" /> <input type="text" name="productLink[]" /></td>
        </tr><tr>
            <td><input type="checkbox" name="productId[]" value="<?= $products->id; ?>" /> <input type="text" name="productLink[]"  /></td>
        </tr>
    </table>
    <input type="submit" name="formSubmit" value="Submit" />
</form>

【问题讨论】:

  • 你不能。由于 procuctLink 是一个数组,您将获得所有这些。无论如何,您将收到表单内的所有内容。你只需要过滤/选择你需要的东西。您可以检查哪个复选框设置为true,然后获取相应的输入。
  • 用相同的键链接它们 -> name="productId[1]"/name="productLink[1]"。然后在发布时,您可以遍历复选框键以仅获取输入键值
  • 我之前的答案可能应该是&lt;label&gt; &lt;input type="checkbox" name="productId[][&lt;?= $products-&gt;id ?&gt;]" value="&lt;?= $products-&gt;link ?&gt;" /&gt; Product Name Goes Here &lt;/label&gt;(请注意开头的额外数组以允许输入分组。)

标签: php html codeigniter


【解决方案1】:

你可以找到很多解决方案,所以我认为你应该看看这个

HTML Element Array, name="something[]" or name="something"?

您不能这样,但是有一些替代方法,例如,当用户选中复选框时,您可以调用 javascript 函数创建一个数组并将 json 字符串化数据发送到您的 php。

下面的另一种方式;

在你的 html 中

<form  method="post">
 <table>
   <tr>
    <td><input type="checkbox" name="productId[]" value="<?= $products->id; ?>" /> <input type="text" name="productLink[<?= $products->id; ?>"]"></td>
   </tr>
   <tr>
    <td><input type="checkbox" name="productId[]" value="<?= $products->id; ?>" /> <input type="text" name="productLink[<?= $products->id; ?>"]"></td>
   </tr>
   <tr>
    <td><input type="checkbox" name="productId[]" value="<?= $products->id; ?>" /> <input type="text" name="productLink[<?= $products->id; ?>"]"></td>
   </tr>
   <tr>
    <td><input type="checkbox" name="productId[]" value="<?= $products->id; ?>" /> <input type="text" name="productLink[<?= $products->id; ?>"]"></td>
   </tr>
   <tr>
    <td><input type="checkbox" name="productId[]" value="<?= $products->id; ?>" /> <input type="text" name="productLink[<?= $products->id; ?>"]"></td>
   </tr>
  </table>
  <input type="submit" name="formSubmit" value="Submit" />
</form>

在你的 php 中(假设在 codeigniter 中,因为你标记了它)

function some_func_name(){
  $product_ids = $this->input->post('productId');
  $posted_product_links = $this->input->post('productLink');
  $selected_links = [];
  for($product_ids as $id){
    $p_link = $posted_product_links[$id];
    array_push($selected_links, array('id' => $id, 'link' => $p_link));
  }
}

希望对你有所帮助..

【讨论】:

  • 感谢您的帮助。这种方法确实有效,但它并不是我想要的。我最终只使用了 jquery。
  • @EdwinCruz 你问的时候没说
【解决方案2】:

通过以下代码更新您的代码

HTML

<form action="process.php" method="post">
    <table>
        <tr> 
            <td> 
                <input type="checkbox" name="productId[1]" value="<?=$products->id;?>" <?=  set_checkbox('productId[1]', $products->id);?> />
                <input type="text" name="productLink[1]" value="<?=  set_value('productLink[1]');?>"/>
            </td>
        </tr><tr>
            <td>
                <input type="checkbox" name="productId[2]" value="<?=$products->id;?>" <?=  set_checkbox('productId[2]', $products->id);?> />
                <input type="text" name="productLink[2]" value="<?=  set_value('productLink[2]');?>" />
            </td>
        </tr><tr>
            <td>
                <input type="checkbox" name="productId[3]" value="<?=$products->id;?>" <?=  set_checkbox('productId[3]', $products->id);?>/>
                <input type="text" name="productLink[3]" value="<?=  set_value('productLink[3]');?>" />
            </td>
        </tr><tr>
            <td>
                <input type="checkbox" name="productId[4]" value="<?=$products->id;?>" <?=  set_checkbox('productId[4]', $products->id);?> />
                <input type="text" name="productLink[4]" value="<?=  set_value('productLink[4]');?>" />
            </td>
        </tr><tr>
            <td>
                <input type="checkbox" name="productId[5]" value="<?=$products->id;?>" <?=  set_checkbox('productId[5]', $products->id);?> />
                <input type="text" name="productLink[5]" value="<?=  set_value('productLink[5]');?>" />
            </td>    
        </tr>
    </table>
    <input type="submit" name="formSubmit" value="Submit" />
</form>

控制器

public function some_func_name(){
    if($this->input->post()){
        $checkbox = $this->input->post('productId');
        $textbox = $this->input->post('productLink');
        $selected = @array_intersect_key($textbox, $checkbox);

        echo '<pre>';
        print_r($selected);
    }
}

这里的代码:https://pastebin.com/UC1UFPRF

【讨论】:

  • 谢谢 我刚学会了一个新功能。我最终只使用了 Jquery。
【解决方案3】:

当 obj 为空时,我最终使用 jquery 删除了 obj。

    $(document).ready(function(){
    $("form").submit(function(){
    $("input").each(function(index, obj){
          if($(obj).val() == "") {
               $(obj).remove();
              }
            });
      });
    });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2015-04-17
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    • 2017-02-03
    相关资源
    最近更新 更多