2017-03-07 43 views
0

我有一个GET表单来选择搜索过滤器。不以GET格式提交默认值

<form action="" method="get"> 
    <select name="filter"> 
     <option value="">no filter</option> 
     <option value="1">filter1</option> 
     <option value="2">filter2</option> 
    </select> 
    <input type="submit" value="Search"/> 
</form> 

如果用户选择filter1,将URL /search?filter=1,但如果他选择no filter,将URL /search?filter=

我想这是/search

我怎么能告诉表单只提交非默认值?

+2

仅使用HTML那是不可能的。您需要干扰客户端上的JavaScript(提交处理程序检查选择了哪个选项),或者将服务器端从'/ search?filter ='重定向到'/ search' – CBroe

回答

1

你可以使用javascript或jquery来做到这一点。 设置一个id来选择列表并执行javascript onchange事件。如果用户不选择过滤器,那么名称属性将被删除,因此过滤器类型不会成为搜索的一部分,但如果用户选择过滤器1或过滤器2,则选择列表的名称将被过滤,因此它将显示在搜索变量中。

 <form action="" method="get"> 
     <select id="filter" name="filter"> 
      <option value="">no filter</option> 
      <option value="1">filter1</option> 
      <option value="2">filter2</option> 
     </select> 
     <input type="submit" value="Search"/> 
    </form> 
    <script> 
$("#filter").change(function(){ 
if($(this).val()==''){ 
$(this).removeAttr("name"); // if no filter selected 
}else{ 
$(this).attr("name","filter"); // if filter 1 or filter 2 selected 
} 
}); 
</script> 
0

尝试

<option value="0">no filter</option> 

,并把验证它

0

Im相当肯定你不能。您正在提交该数据,但没有值仍然是一个值。

只需使用正确的验证来检查过滤器是否为空。

1

我想你可以写你的提交函数!所以你可以做如下代码: 1)改变输入的类型从提交按钮并添加onclick属性指向你的提交功能; 2)在那里,检查选择项目的值,如果没有选择,则不发送任何默认值。 3)使用空白表单并将其方法更改为POST。

跟随一个示例代码:

<html> 
<head> 
<script type="text/javascript" > 
    function mySubmit() { 
    var url="/search"; 
    if (document.myForm.filter.value>0) { 
     url=url+"?filter="+document.myForm.filter.value; 
    } 
    document.mySubmitForm.action=url; 
    document.mySubmitForm.submit(); 
    } 
</script> 
</head> 
<body> 
<form name="mySubmitForm" action="" method="post"> </form> 
<form name="myForm" > 
    <select name="filter"> 
     <option value="">no filter</option> 
     <option value="1">filter1</option> 
     <option value="2">filter2</option> 
    </select> 
    <input type="button" value="Search" onclick="javascript:mySubmit();"/> 
</form> 
</body> 
</html>