当我使用jQuery的serialize()方法提交表单时,除了表单中的textarea之外,所有内容都会被提交。这是一个常见的问题吗?我无法弄清楚。表格有效,只有textarea保持未定义???
<textarea form="new_note_form" id="note_text" name="note_text" required="required"></textarea>
答案 0 :(得分:22)
直到将name
属性添加到textarea才能正常工作。
<textarea id="sLifeStyle3Content" name="sLifeStyle3Content" placeholder="HTML is allowed">
<apex:outputText value="{!sLifeStyle3Content}" />
</textarea>
答案 1 :(得分:5)
不,不。
工作正常。 http://jsfiddle.net/nuBkM/
<form>
<input name="foo" value="bar"/><br>
<textarea name="something">lorem ipsum</textarea>
</form>
JavaScript
console.log($("form").serialize());
// => foo=bar&something=lorem+ipsum
.serializeArray
也适用
console.log($("form").serializeArray());
// => [{name: "foo", value: "bar"}, {name: "something", value: "lorem ipsum"}]
答案 2 :(得分:1)
另一个解决方法是将textarea值转换为变量并使用ajax调用传递...
var comment = $(&#39; .note_comment&#39;)。val();
$.ajax({
type: "POST",
url: '/approot/rewrite.cfm/app.people/insertNote?format=json&Comment=' + comment,
data: $("form[name='add_note_form']").serializeArray(),
success: function(data)
{
alert('success');
}
});
答案 3 :(得分:0)
在小提琴中工作得很好。 http://jsfiddle.net/Ultimate/2Ey2A/ 使用
进行测试$('button').click(function(){
alert($('form').serialize());
});
答案 4 :(得分:0)
我有同样的经历。使用$(“#form_id”)提交表单.serialize()不包括textarea字段。这种行为在过去两年中是唯一具有textarea元素的形式。我不时地重新检查表单和代码,以得出它应该工作的结论,但事实并非如此。
毫不奇怪,我的解决方法是首先将textareas的内容移动到隐藏文本框中,然后序列化表单数据。
答案 5 :(得分:0)
我们遇到了同样的问题,尽管设置了name属性,textarea没有被序列化,并注意到它取决于textarea放置在表单中的位置。我们很幸运将textarea移动到表单上的另一个位置来解决问题。
答案 6 :(得分:0)
会遗漏textarea 。
我知道它反对良好做法,但是,如果你想使用jQuery的序列化功能,你必须从textarea元素中删除这个属性。
答案 7 :(得分:0)
这是我用来包含/排除每个元素的方法,因为我需要从表单中获取它们。此方法也使我们的旧表单可序列化,即使某些元素只有id定义而不是名称。
$( 'textarea' ).each( function() {
$(this).attr( 'type', 'textarea' );
});
$( 'input:text:not( ".excluded" ), input:checkbox, input:radio, textarea' ).each( function() {
if (!$(this).hasClass( 'answer' )) {
$(this).addClass( 'answer' );
}
if ( !$(this).attr( "name" ) && $(this).attr( 'id' ) ) {
$(this).attr( "name", $(this).attr("id") );
}
});
然后我调用下面的函数在$( '.answer' ).change()
事件,页面导航和$('form').submit()
事件上获取序列化数组。这种方法对我能辨别的页面性能没有明显的负担。
function storeFormData() {
var serializedData = $( ".answer" ).serializeArray();
var formDataObj = serializedData;
var formDataString = JSON.stringify(formDataObj);
localStorage.setItem(fso_id, formDataString);
return formDataString;
}
答案 8 :(得分:-1)
如果textarea由tinyMCE等编辑器控制,您可能需要拨打tinyMCE.triggerSave()
,如this answer中所述。