gpt4 book ai didi

javascript - 将动态生成的表单传递给 Controller

转载 作者:行者123 更新时间:2023-12-02 15:46:21 24 4
gpt4 key购买 nike

这是我的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>

由于在用户单击“创建”按钮之前,此表单中的元素是未知的,所以我不确定什么是处理此表单的最佳方法。

我需要将元素的值传递给 Controller ​​以在 View 中呈现它们(稍后需要使用这些值从数据库中检索一些数据)。

提交后,我尝试了不同的方式来查看这些元素,例如:
for (name in params.list('name')) {
println name
}


params.name.each{i->System.out.println(i);}

似乎我的参数没有传递给 Controller ​​。那是因为我的表单元素是使用常规HTML而不是Grails表单 <g: checkbox ... >生成的,所以DOM元素无法传递给 Controller ​​吗?如果是,是否可以使用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;
}

在 Controller 中: println params

[submit:Submit, note:note, to:to, lastname:lastname, heading:heading, controller:dynamicform, action:index]



enter image description here

注释:在HTML表单提交中,任何带有 name属性的输入都将被提交。如果没有 name attr,则不会将任何表单数据传递到服务器。

建议:将JS函数 Createcheckbox(chkboxid)放在 createform()之前

关于javascript - 将动态生成的表单传递给 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47385391/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com