2012-01-28 6 views
2

Скажем, у меня есть этот вид:Некоторые значения формы не получают поданные после использования .replaceWith()

<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. –

+0

@ Свекла-свекла Да, что работает :) Хм, но мне интересно, почему это не работает. – Michelle

+0

Не знаю. Это не сразу очевидно. Вы можете попробовать: .replaceWith ('') '(в двух местах). то есть. добавьте закрывающий '/' к тегу. Вероятно, никакого эффекта, но стоит попробовать. –

ответ

2

Вы должны заменить <select> на </select> и <input type="submit> на <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

+0

С jsfiddle нет теста с php, но в моем тесте я добавил предупреждение, которое показывает, какие ключи со значениями будут отправлены. Когда вы копируете скрипт, вам нужно удалить обработчик отправки, чтобы проверить его с помощью php, потому что 'return false;' предотвращает отправку значений; это только для теста 'jsfiddle'. – scessor

Смежные вопросы