当我使用 jQuery 的 serialize() 方法提交表单时,除了表单中的 textarea 之外,所有内容都会被提交。这是一个常见问题吗?我想不通。除了保持未定义的文本区域外,该表单有效???
<textarea form="new_note_form" id="note_text" name="note_text" required="required"></textarea>
当我使用 jQuery 的 serialize() 方法提交表单时,除了表单中的 textarea 之外,所有内容都会被提交。这是一个常见问题吗?我想不通。除了保持未定义的文本区域外,该表单有效???
<textarea form="new_note_form" id="note_text" name="note_text" required="required"></textarea>
在您将属性添加到 textarea之前,它不起作用。name
<textarea id="sLifeStyle3Content" name="sLifeStyle3Content" placeholder="HTML is allowed">
<apex:outputText value="{!sLifeStyle3Content}" />
</textarea>
不,它没有。
它工作正常。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"}]
另一种解决方法是将 textarea 值转换为变量并通过 ajax 调用传递它...
var 评论 = $('.note_comment').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');
}
});
如果 textarea 由 tinyMCE 之类的编辑器控制,您可能需要调用tinyMCE.triggerSave()
,如本答案中所述。
我有同样的经历。使用 $("#form_id").serialize() 提交表单不包括 textarea 字段。在过去 2 年中,这种行为在唯一具有 textarea 元素的表单中是一致的。我不时地重新检查表单和代码以得出它应该可以工作的结论,但没有。
不出所料,我的解决方法是首先将文本区域的内容移动到隐藏的文本框中,然后序列化表单数据。
我们遇到了同样的问题,尽管设置了 name 属性,但 textarea 没有被序列化,并注意到它取决于 textarea 在表单中的放置位置。我们有幸将 textarea 移动到表单上的另一个位置来解决问题。
在小提琴中工作正常。 http://jsfiddle.net/Ultimate/2Ey2A/ 测试
$('button').click(function(){
alert($('form').serialize());
});
这是我用来包含/排除表单中需要的每个元素的方法。即使某些元素仅定义了 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;
}
它省略了 textarea,除非您从 textarea 元素中删除 'form="new_note_form"' 。
我知道这违反了良好的做法,但是,如果你想使用 jQuery 的序列化功能,你必须从 textarea 元素中删除这个属性。