这是我的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时遵循最佳实践,所以我很感激任何建议或建议。
答案 0 :(得分:0)
这是一个简单的修复 -
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
[提交:提交,注意:注意:to:to,lastname:lastname,heading:heading, controller:dynamicform,action:index]
评论:在HTML表单提交中,将提交具有name
属性的任何输入。如果没有name
attr,则不会将表单数据传递给服务器。
建议:将您的JS函数Createcheckbox(chkboxid)
放在createform()
之前