2012-01-28 38 views
2

比方說,我有這樣的形式:某種形式的數值()

<form action="submit" method="post"> 
<select name="category" id="categorylist"> 
<option value="love">Love</option> 
<option value="magic">Magic</option> 
<option value="custom">Custom</option> 
</select> 
<textarea name="content">SomeContent</textarea> 
<input type="submit"> 
</form> 

我想給select變成一個input當我選擇自定義,所以我想出了這個:

$(function(){ 
    $('#categorylist').change(function(){ 
    $(this).replaceWith('<input type="text" name="category">'); 
    }); 
    if($('#categorylist').val() == 'custom') 
    $('#categorylist').replaceWith('<input type="text" name="category">'); 
}); 

但是,當選擇變爲輸入,$_POST['category']是不存在的,當我在表單提交傾倒$_POST。爲什麼這樣?

+1

最好隱藏兩個元素,選擇和輸入HTML,使用最初隱藏的輸入(使用CSS)。然後使用jQuery的'.hide()'和'.show()'進行交換。無論隱藏哪個元素都不會包含在POST中。 – 2012-01-28 23:48:04

+0

@甜菜根 - 甜菜根是的,它的作品:)嗯,但我想知道爲什麼這不起作用。 – Michelle 2012-01-28 23:56:23

+0

我不知道。這並不明顯。你可以嘗試'.replaceWith('')'(在兩個地方)。即。添加一個結束'/'到標籤。可能沒有效果,但值得嘗試。 – 2012-01-29 01:06:23

回答

2

您應該用</select><input type="submit>替換<select><input type="submit">在您的HTML。使用下面的JavaScript,.replaceWith()和提交表單沒有問題。

$(function(){ 
    $('#categorylist').change(function(){ 
     if($('#categorylist').val() == 'custom') 
      $('#categorylist').replaceWith('<input type="text" name="category">'); 
    }); 
}); 

請參閱my test

+0

你用PHP測試過嗎?它仍然沒有提交。 – Michelle 2012-01-28 23:53:47

+0

與jsfiddle沒有用PHP的測試是可用的,但在我的測試中,我添加了一個警報,顯示哪些鍵值將被髮送。當你複製腳本時,你必須刪除提交處理程序來測試你的php,因爲'return false;'防止發送值;這僅適用於'jsfiddle'測試。 – scessor 2012-01-28 23:58:42