将复选框表单发送到特定URL

时间:2012-11-28 13:37:19

标签: php html forms checkbox

    <form action="" method="get" name="combination" target="_self">
            <input type="checkbox" name="tag[]" value="pop" />pop<br /><br />
            <input type="checkbox" name="tag[]" value="rock" />rock<br /><br />
            <input type="checkbox" name="tag[]" value="indie" />indie<br /><br />
            <input type="checkbox" name="tag[]" value="electronic" />electronic<br />
    <input name="" type="submit">
    </form>   

如果用户点击pop和rock box我想将表单发送到www.mysite.com/?view=listen&tag[]=pop&tag[]=rock我该怎么办? 用户可以选择一个,两个或三个标签。所以标签数组的元素号是可变的。

4 个答案:

答案 0 :(得分:2)

您不能使用纯HTML。您只能为action属性指定一个网址。

但是你可以使用JavaScript(如果没有启用JS,它将使你的表单变得无用)。只需选中复选框的checked状态,然后相应地更换action网址。

答案 1 :(得分:1)

实际上您不希望表单调用操作,因此您必须取消提交。 它错过了返回错误。 “location.href”也是错误的,右边是“parent.window.location.href”

现在尝试和工作。

   <form action=""  method="get" name="combination" target="_self">
            <input type="checkbox" name="tag[]" value="pop" />pop<br /><br />
            <input type="checkbox" name="tag[]" value="rock" />rock<br /><br />
            <input type="checkbox" name="tag[]" value="indie" />indie<br /><br />
            <input type="checkbox" name="tag[]" value="electronic" />electronic<br />
    <input name="" type="submit">
    </form>   


   <script>
    $("form").submit(function(){
       var url = "http://www.mysite.com/?view=listen&";

       var i = 0;
      $("input:checked").each(function(){
          url += "tag[" + i + "]=" + $(this).val() + "&";
          i++;
      });
      parent.window.location.href = url;
      return false;
    });
</script>

答案 2 :(得分:1)

也许我没有在这里得到确切的问题,但为什么不对这样的表单做一些小改动:

<form action="http://www.mysite.com/">
    <input type="hidden" name="view" value="listen" />
    <input type="checkbox" name="tag[]" value="pop" />pop<br /><br />
    <input type="checkbox" name="tag[]" value="rock" />rock<br /><br />
    <input type="checkbox" name="tag[]" value="indie" />indie<br /><br />
    <input type="checkbox" name="tag[]" value="electronic" />electronic<br />
    <button type="submit">submit</button>
</form>

答案 3 :(得分:0)

这就是表单操作的用途 - 在这里您将指定表单的位置。

使用jQuery,您可以编辑特定事件的表单操作。为您的表单添加my_form和您的复选框描述性ID:

<form id="my_form" action="" method="get" name="combination" target="_self">
    <input id="pop_check" type="checkbox" name="tag[]" value="pop" />pop<br /><br />
    <input id="rock_check" type="checkbox" name="tag[]" value="rock" />rock<br /><br />
    <input type="checkbox" name="tag[]" value="indie" />indie<br /><br />
    <input type="checkbox" name="tag[]" value="electronic" />electronic<br />
    <input name="" type="submit">
</form>

然后,在表单下面,您可以编写以下jQuery代码:

<script type="text/javascript">
    $("checkbox[name='tag']").on("click", function( //when any of the checkboxes is clicked the following code runs
        if($("#pop_check").is(":checked") || $("#rock_check").is(":checked")){ //if one of the two target check boxes is checked, the form action will be changed as desired
            $("#my_form").attr("action","www.mysite.com/?view=listen");
        }else if(!$("#pop_check").is(":checked") && !$("#rock_check").is(":checked")){ //since the user can also toggle off all checkboxes again, we need to check for that too and change the form action back to "" if required
            $("#my_form").attr("action","");
        }
    ));
</script>

如果你(即将)学习jQuery,我强烈推荐它。这里有一些非常好的教程,你可能会觉得有用,他们教我几乎所有关于jQuery的知识:http://thenewboston.org/list.php?cat=32

修改

还有另一种方法可以做到这一点。在提交表单后运行的php代码中,您可以简单地检查是否选中了这两个复选框中的任何一个,并根据使用php的标题函数重定向或不重定向:

<?php
    //After form submission with form action="" (i.e. at the top of your php file)
    if(in_array("pop", $_GET['tag']) || in_array("rock", $_GET['tag'])){
        header('Location:www.mysite.com/?view=listen&tag=pop&tag=rock');
        exit;
    }
?>

实际上,你应该使用post作为form方法而不是get,因为表单结果不需要是可收藏的。阅读更多关于php内置header()in_array()函数的内容。