2015-08-22 102 views
1

我很难以理解它应该是简单的东西。在提交表单时,我有三个<select>输入,它们在查询字符串中需要它们的值;

domain.com/?filter=one,two,three

这可能吗?我应该如何构造name属性的表单?我也在想,如果我可以在提交后获得$_GET值服务器端,并自己创建阵列并将其设置为页面的URL,但是技术上不是重定向?

理想情况下,这可以通过查询字符串完成,因此URL可以被复制,粘贴或共享,但它也不是敏感数据。希望有人可以帮助...下面的一些粗糙的标记;

<form action="get"> 
    <select name="filter[]"></select> 
    <select name="filter[]"></select> 
    <select name="filter[]"></select> 
    <button type="submit>Submit</button> 
</form> 

..和是有原因的,为什么所有的<option>元素不在一个<select>,它的效果并不理想,我知道了!谢谢

+0

据我所知,没有办法在表单元素上构造'name'属性来获得一个名称的逗号分隔值列表。使用括号的语法将导致查询字符串看起来像'?filter [] = one&filter [] = two&filter [] = three',PHP应该将其解释为一个数组。如果需要,可以使用JavaScript和隐藏的输入转换为以逗号分隔的值,但如果JavaScript被禁用或不可用,则这不起作用。 – skeggse

+0

@skeggse感谢您的回复。我认为jS可能是解决这个问题的唯一方法。 – Dan

回答

1

我不建议使用这段代码片段,它只是为了演示使用JavaScript的可能解决方案。

HTML:

<form action="get" id="myform"> 
    <input id="filter-result" name="filter" type="hidden"> 
    <input class="filter-value"> 
    <input class="filter-value"> 
    <input class="filter-value"> 
    <button type="submit">Submit</button> 
</form> 

的JavaScript:

var slice = Array.prototype.slice; 
var myform = document.querySelector("#myform"); 

myform.addEventListener('submit', function() { 
    document.querySelector("#filter-result").value = 
    slice.call(myform.querySelectorAll(".filter-value")) 
    .map(function(input) { 
     return input.value; 
    }).join(','); 
}); 

注意,过滤器值输入没有name,所以他们将不会被包含在GET查询字符串。

+0

@丹如果此答案解决了您的问题,或者足以回答您的问题,请点击上/下选项下的灰色复选框接受此问题。这样,任何有类似问题的人都可以找到最能帮助你的答案。 – skeggse