26

当我使用 jQuery 的 serialize() 方法提交表单时,除了表单中的 textarea 之外,所有内容都会被提交。这是一个常见问题吗?我想不通。除了保持未定义的文本区域外,该表单有效???

<textarea form="new_note_form" id="note_text" name="note_text" required="required"></textarea>     
4

9 回答 9

34

在您将属性添加到 textarea之前,它不起作用。name

<textarea id="sLifeStyle3Content" name="sLifeStyle3Content" placeholder="HTML is allowed">
  <apex:outputText value="{!sLifeStyle3Content}" />
</textarea>
于 2014-08-01T02:18:50.037 回答
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"}] 
于 2013-07-17T19:58:22.797 回答
1

另一种解决方法是将 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');         
               }
             });
于 2014-03-18T20:47:18.063 回答
1

如果 textarea 由 tinyMCE 之类的编辑器控制,您可能需要调用tinyMCE.triggerSave(),如本答案中所述。

于 2017-12-05T16:49:55.240 回答
0

我有同样的经历。使用 $("#form_id").serialize() 提交表单不包括 textarea 字段。在过去 2 年中,这种行为在唯一具有 textarea 元素的表单中是一致的。我不时地重新检查表单和代码以得出它应该可以工作的结论,但没有。

不出所料,我的解决方法是首先将文本区域的内容移动到隐藏的文本框中,然后序列化表单数据。

于 2014-02-01T21:00:18.237 回答
0

我们遇到了同样的问题,尽管设置了 name 属性,但 textarea 没有被序列化,并注意到它取决于 textarea 在表单中的放置位置。我们有幸将 textarea 移动到表单上的另一个位置来解决问题。

于 2014-09-09T14:30:43.510 回答
0

在小提琴中工作正常。 http://jsfiddle.net/Ultimate/2Ey2A/ 测试

$('button').click(function(){
    alert($('form').serialize());
});
于 2013-07-17T19:57:17.533 回答
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;
}
于 2018-06-08T19:01:19.203 回答
0

它省略了 textarea,除非您从 textarea 元素中删除 'form="new_note_form"' 。

我知道这违反了良好的做法,但是,如果你想使用 jQuery 的序列化功能,你必须从 textarea 元素中删除这个属性。

于 2017-03-08T16:37:33.537 回答