2012-01-28 56 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