这是我的 JavaScript 函数,用于在用户单击创建按钮时基于 XML 文件在运行时生成复选框:
function createform(){
var xml = '<root><note ><to>x1</to><from><firstname>x2</firstname><lastname>x3</lastname></from><heading>x4</heading></note><note><to>x5</to><from><firstname>x6</firstname><lastname>x7</lastname></from><heading>x8</heading></note></root>';
var node = (new DOMParser()).parseFromString(xml, "text/xml").documentElement;
var nodes = node.querySelectorAll("*");
for (var i = 0; i < nodes.length; i++) {
var label = document.createElement('label');
var br = document.createElement('br');
var alabel = document.getElementById('div');
var last = alabel[alabel.length - 1];
label.htmlFor = "lbl"+i;
label.appendChild(Createcheckbox(nodes[i].tagName));
label.appendChild(document.createTextNode(nodes[i].tagName));
label.appendChild(br);
document.getElementById('div').appendChild(label);
}
}
function Createcheckbox(chkboxid) {
var checkbox = document.createElement('input');
checkbox.type = "checkbox";
checkbox.id = chkboxid;
checkbox.value = chkboxid;
checkbox.checked = false;
return checkbox;
}
同样在我的 gsp 页面上,我有这个 HTML 脚本。
<body>
<g:form name="myForm" controller="dynamicform" action="index">
<input type="button" id="btncreate" value="Create" onclick="createform()"/>
<g:submitButton name="submit" value="Submit" />
<Div id='div'>
</div>
</g:form>
</body>
由于此表单中的元素在用户单击“创建”按钮之前是未知的,因此我不确定处理此表单的最佳方法是什么。
我需要将元素的值传递给控制器以在视图中呈现它们(稍后我需要使用这些值从我的数据库中检索一些数据)。
提交后我尝试了不同的方式来查看这些元素,例如:
for (name in params.list('name')) {
println name
}
和
params.name.each{i->System.out.println(i);}
似乎我的参数没有传递给控制器。那是不是因为我的表单元素是使用常规 HTML 而不是 Grails 表单生成的<g: checkbox ... >
,所以 DOM 元素无法传递给控制器?如果是,有没有办法使用 Grails 表单重写我的 createform() 函数?
我正在尝试在学习 Grails 时遵循最佳实践,所以我很感激任何关于此的建议或建议。
这是一个简单的修复 -
function Createcheckbox(chkboxid) {
var checkbox = document.createElement('input');
checkbox.type = "checkbox";
checkbox.id = chkboxid;
checkbox.value = chkboxid;
checkbox.checked = false;
checkbox.name = chkboxid; // <-- the fix!!!
return checkbox;
}
在控制器中: println params
[submit:Submit, note:note, to:to, lastname:lastname,heading:heading, controller:dynamicform, action:index]
注释:在 HTML 表单提交中,任何带有name
属性的输入都会被提交。如果没有name
attr,表单数据将不会传递到服务器。
建议:将你的 JS 函数放在Createcheckbox(chkboxid)
前面createform()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句