我怎样才能与已经奔动态添加的形式工作?
你好。 我用下面的代码片段动态添加表格到我的网页。 现在一切正常:
$(document).ready(function() {
$("#add").click(function() {
var intId = $("#buildyourform div").length + 1;
var fieldWrapper = $("<div class=\"fieldwrapper\" id=\"field" + intId + "\"/><br>");
// I am adding 2 new forms there:
var topic = $( '<form action = "#" method = "POST" name="new_topic" id="new_topic">'+ document.getElementById('csrf_token').value +
'<textarea name="name" maxlength="1000" cols="25" rows="6" id="new_form"></textarea></form>'+
'<br><input type="submit" value="Submit" class="newMygt" />');
var summary = $('<form action = "#" method = "POST" name="new_summary" id="new_summary">'+ document.getElementById('csrf_token').value +
'<textarea name="content" maxlength="1000" cols="25" rows="6" id="new_form"></textarea></form>'+
'<br><input type="submit" value="Submit" class="newMygt" />');
(topic).appendTo(fieldWrapper).show('slow');
(summary).appendTo(fieldWrapper).show('slow');
$("#buildyourform").append(fieldWrapper);
});
与被称为一个伟大的工具添加我解析它们的形式之后jQuery的序列化对象并创建一些对象文本(f.ex. {"name":"John","content":"blah blah"}
然后我打开这些对象文本转换为JSON与JSON.stringify()
一切都以简单的形式顺利woorks,但是当我尝试解析形式,我动态添加。 我收到{“名”:“”,“内容”:“”}数据,因为我解析形式尚不存在。
问题:我能得到一些阅读材料或提示我怎么能修改jQuery的序列化对象解析的形式,我的广告动态? 扩展的代码对我来说有点太复杂了。
编辑:
我发现了另一个JavaScript片段jquery.serializeJSON序列化形式转换为JavaScript对象(json.stringify()“将其投入的Json更高版本)和它似乎是更先进的日期,它是积极发展,但我我得到完全同样的结果吧: {"name":"","content":""}
答案:
其实我应该序列上的提交事件,而不是按一下按钮的形式。 这样,我将在用户填写后,被序列化的数据。我应该把结束标记之后的提交按钮,而不是之前。 工作代码:
$(document).ready(function() {
$("#add").click(function() {
var intId = $("#buildyourform div").length + 1;
var fieldWrapper = $("<div class=\"fieldwrapper\" id=\"field" + intId + "\"/><br>");
// I am adding 2 new forms there:
var topic = $( '<form action = "#" method = "POST" name="new_topic" class="new_topic">'+ document.getElementById('csrf_token').value +
'<textarea id ="1" name="name" maxlength="1000" cols="25" rows="6" id="new_form"></textarea><br><input type="submit" value="Submit" class="newMygt" /></form>'
);
var summary = $('<form action = "#" method = "POST" name="new_summary" class="new_summary">'+ document.getElementById('csrf_token').value +
'<textarea id="2" name="content" maxlength="1000" cols="25" rows="6" id="new_form"></textarea><br><input type="submit" value="Submit" class="newMygt" /></form>'
);
(topic).appendTo(fieldWrapper).show('slow');
(summary).appendTo(fieldWrapper).show('slow');
$("#buildyourform").append(fieldWrapper);
});
$('#buildyourform').on('submit', 'form', function() {
var $submittedForm = $(this); // form where you clicked submit button
var $forms = $submittedForm.parents('.fieldwrapper').find('form'); // both forms
var serializedForm = $forms.serializeJSON(); // serialize both forms
var json = JSON.stringify(serializedForm);
alert(json)
event.preventDefault(); // do not submit the form
});
现在,我得到正是我想要的:
{"name":"John","content":"blah blah blah"}