1
    <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>   

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

4

4 回答 4

2

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

但是您可以使用 JavaScript(如果没有启用 JS,它将使您的表单无用)。只需检查复选框的checked状态并相应地交换actionURL。

于 2012-11-28T13:40:15.807 回答
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>
于 2012-11-28T13:52:57.923 回答
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>
于 2012-11-29T04:03:56.630 回答
0

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

使用jQuery,您可以编辑特定事件的表单操作。为您的表单提供一个 id,例如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 作为表单方法而不是 get,因为表单结果不需要可收藏。阅读更多关于 php 的内置header()in_array()函数。

于 2012-11-28T13:53:44.487 回答