如何从json字段数组动态创建一个没有jquery的表单
How can I dynamically create a form WITHOUT jquery from a json field array?
我想从字段的json数组创建一个表单,并让它在提交时调用回调。
例如,我想要以下内容,它将创建一个具有3个字段的表单,并在单击提交时调用onSubmitCallback。
<script type="text/javascript">
var fc = new FormCreator({
owner: document.body,
fields: [
{'name':'name', 'title':'name', 'value':'test'},
{'name':'last_day', 'title':'last day', 'value':'test asdfas fdj'},
{'name':'ez', 'title':'how', 'value':'test asdf'}
],
config: {
firstColWidth:'200px'
},
onSubmitCallback: function(data, form){
console.log(data);
return false;
}
});
</script>
有这样的例子吗?
以下内容将满足您的需要-在大约30分钟内完成,因此您的结果可能会有所不同!
function FormCreator(options){
this.options = options;
this.createForm();
}
FormCreator.prototype.getFormValues = function(form)
{
var result = {};
for ( var i = 0; i < form.elements.length; i++ ) {
var e = form.elements[i];
if (e.type != "text")
{
continue;
}
result[e.name] = e.value;
}
return result;
}
FormCreator.prototype.addFormField = function(form, type, key, value)
{
var field = document.createElement("input");
field.setAttribute("type", type);
field.setAttribute("name", key);
field.setAttribute("value", value);
form.appendChild(field);
}
FormCreator.prototype.createForm = function()
{
var form = document.createElement('form');
this.form = form;
for (var i=0; i < this.options.fields.length; i++)
{
var field = this.options.fields[i];
var label = document.createElement('span');
var width = this.options.config.firstColWidth || '100px';
label.style.cssText = 'min-width:' + width + ' !important; display: inline-block';
var t = document.createTextNode(field.title || field.name);
label.appendChild(t);
form.appendChild(label);
this.addFormField(form, 'text', field.name, field.value);
var br = document.createElement('br');
form.appendChild(br);
}
var me = this;
form.onsubmit = function( e ) {
e = e || window.event;
if (! me.options.onSubmitCallback)
{
return false;
}
var data = me.getFormValues(form);
var result = me.options.onSubmitCallback(data, form);
if (result === undefined)
{
result = false;
}
return result;
};
this.options.owner.appendChild(form);
this.addFormField(form, 'submit', 'submit', 'Submit');
this.addFormField(form, 'reset', 'reset', 'Reset');
}
function test(){
var fh = new FormCreator({
owner: document.body,
fields: [
{'name':'name', 'title':'name', 'value':'test'},
{'name':'last_day', 'title':'last day', 'value':'test ''asdfas'' fdj'},
{'name':'ez', 'title':'how', 'value':'test "asdf'}
],
config: {
firstColWidth:'200px'
},
onSubmitCallback: function(data, form){
alert("Data received. Look in console for results!");
console.log(data);
return false;
}
});
}
test();
相关文章:
- jquery mobile上多个页面上的一个表单
- 循环遍历包含另一个表单的表单
- 如何在javascript转换编码中将一个动态值从一个表单添加到另一个页面
- 我确实有一个表单,如果用户输入了输入,它应该检查否定或空的输入框,并抛出一条警告消息
- 如何通过 JS 将内容从一个表单中的一个文本框复制到另一个表单中的另一个文本框
- Slding表单不会一次显示一个表单
- html链接onclick弹出一个表单
- 使用 javascript 将值从一个表单传递到另一个表单
- 当在一个表单中进行更改时,ng-disabled 会触发所有表单验证
- 如何将一个表单中的项目添加到 Rails 中另一个表单的下拉选项
- 如何在一个表单标记中验证多个字段集
- 如何从一个表单的输入字段中获取数据,并使用JQuery在不同的表单中填充相同的输入类型
- 在PHP中将下拉选择列表的内容从一个表单传递到另一个表单
- 一个表单包含多个提交操作
- Javascript-更正用户名和密码以启用另一个表单
- 在ul后面添加一个表单
- angular js如何在提交一个表单时验证另一个表单
- 如何将某些HTML从一个页面转换为另一个表单
- 使用JavaScript将数据从一个表单显示到另一个页面
- 两个表单,一个选择/下拉框-需要将选择值从一个表单复制到另一个表单