jQuery serialize()省略了textarea

时间:2013-07-17 19:53:28

标签: javascript jquery html forms serialization

当我使用jQuery的serialize()方法提交表单时,除了表单中的textarea之外,所有内容都会被提交。这是一个常见的问题吗?我无法弄清楚。表格有效,只有textarea保持未定义???

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

9 个答案:

答案 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元素中删除&#39; form =&#34; new_note_form&#34;&#39; ,否则

会遗漏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中所述。