所选选项的顺序

时间:2015-06-18 01:19:14

标签: javascript php html

我正在尝试制作一个允许我的用户为其主题添加标签的插件。我的想法是使用像这样的多个属性的常规选择:



  <form id="multiselect" method="post" action="foo.php">
    <select id="tags" name="tag_id[]" multiple="multiple">
	<option value="1">Tag 1</option>
	<option value="2">Tag 2</option>
	<option value="3">Tag 3</option>
	<option value="4">Tag 4</option>
	<option value="5">Tag 5</option>
    </select>
    <input type="submit" name="submit" value="Send" class="button">
</form>
&#13;
&#13;
&#13;

然而,我希望能够按照用户选择它们的顺序添加它们......例如如果有人会选择2,4,1我希望能够以完全相同的顺序添加这些标签。问题是数组(print_r($_POST["tag_id"]);)按选项排序,而不是按用户选择的顺序排序。什么是最好的方法,以便我可以使用PHP中的订单? 感谢

2 个答案:

答案 0 :(得分:1)

您需要跟踪用户点击的顺序,并将其与选择数据一起提交。显示标签时,请按先前捕获的字段排序。

答案 1 :(得分:1)

你不能直接这样做。您需要使用javascript执行此操作。保持一个堆栈,每当#tags更改的值发生时,请执行以下操作:

  • 从堆栈中删除未选中的元素(如果有任何堆栈)
  • 将新选中的元素推入堆栈。

这里我用jquery

显示了实现

$(document).ready(function(e) {
    var tags = [];
    $("#tags").change(function(e) {
        var val = $("#tags").val();
        var i;
        for(i = 0; i < tags.length; i++) {
            if(val.indexOf(tags[i]) == -1){
                tags.splice(i,1);
                i--;
            }
        }
        for(i in val){
            if(tags.indexOf(val[i]) == -1){
                tags.push(val[i]);
            }
        }
        alert(tags);
    });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="multiselect" method="post" action="foo.php">
    <select id="tags" name="tag_id[]" multiple="multiple">
	<option value="1">Tag 1</option>
	<option value="2">Tag 2</option>
	<option value="3">Tag 3</option>
	<option value="4">Tag 4</option>
	<option value="5">Tag 5</option>
    </select>
    <input type="submit" name="submit" value="Send" class="button">
</form>

然后您可以将此数组放在任何隐藏类型input中,以便在服务器端使用。