2017-03-07 72 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>