Javascript 如何从Java动态生成的DOM输入元素中获取值

Javascript 如何从Java动态生成的DOM输入元素中获取值,javascript,html,for-loop,dom,Javascript,Html,For Loop,Dom,因此,我有以下HTML代码: <form method="get" action="#" id="startForm"> <input type="text" name="period" id="period" placeholder="The number of days"/> <input type="submit" name="submit" value="submit" id="startSubmit"/> </form>

因此,我有以下HTML代码:

<form method="get" action="#" id="startForm">
    <input type="text" name="period" id="period" placeholder="The number of days"/>
    <input type="submit" name="submit" value="submit" id="startSubmit"/>
</form>

这是JavaScript代码:

var btnSubmit = document.getElementById('startSubmit');
btnSubmit.addEventListener('click', function (e) {

    e.preventDefault();
    var myForm = document.createElement('form');
    var period  = document.getElementById('period').value;

    for(var i = 0; i < period ; i++){

        var input0 = document.createElement('input');   

        input0.setAttribute('type', 'text');
        input0.setAttribute('placeholder', 'The count of tasks');
        input0.setAttribute('style', 'margin: 10px');
        input0.setAttribute('id', 'taskDone'+i);
        input0.setAttribute('onchange', 'myFunction()');

        document.body.appendChild(input0);
        myForm.appendChild(input0);
        document.body.appendChild(myForm);

        function myFunction(){
            var  taskDone = document.getElementById('taskDone').value;
            var  newForm = document.createElement('form');

            for(var j = 0; j < taskDone ; j++){

                var input1 = document.createElement('input');   

                input1.setAttribute('type', 'text');
                input1.setAttribute('id', 'time'+i);

                document.body.appendChild(input1);
                newForm.appendChild(input1);
                document.body.appendChild(newForm);
            };
        };
    };
    console.log(myForm);
});
var btnSubmit=document.getElementById('startSubmit');
btnSubmit.addEventListener('click',函数(e){
e、 预防默认值();
var myForm=document.createElement('form');
var period=document.getElementById('period')。值;
对于(变量i=0;i

因此,我的问题是,在函数中,当我尝试从生成的DOM元素中获取值时,它将重置页面。我要做的是获取要放入输入中的数字,并根据输入的数字创建尽可能多的新输入文本框(它从生成的dom元素中获取数字并创建新的dom元素)

您需要将函数
myFunction()
定义为
myFunction=function(){..}
其次,id属性需要是唯一的

input0.setAttribute('id','taskDone'+i);
设置id和

input0.setAttribute('onchange', 'myFunction("'+i+'")');
调用函数

类似地,访问id为

var  taskDone = document.getElementById('taskDone'+i).value;

试试小提琴-

你只是在浪费内存,你不能把函数的定义放在循环中。你必须把它放在块或单独的定义之外。你应该只在循环中调用函数。但是,在

myFunction() 
您正在尝试获取不存在的元素的id,因为您已使用
id='taskdone'+i.创建了元素。
因此您还必须在myFunction()中附加'i'以获取元素id。 但是我会建议你有一个干净的方法来完成这个任务,就是在修改元素值时在myFunction中传递元素。 使用类似的方式:

 `input0.setAttribute('onchange', 'myFunction(this)');`
这样,您就不再需要元素id来获取其值。 然后像这样创建myFunction:

  function myFunction(element) {
     var id = element.id;
     var taskDone = element.value;
     var i = id.split('taskDone')[1];
     var newForm = document.createElement('form');

     for (var j = 0; j < taskDone; j++) {

         var input1 = document.createElement('input');

         input1.setAttribute('type', 'text');
         input1.setAttribute('id', 'time' + i);

         document.body.appendChild(input1);
         newForm.appendChild(input1);
         document.body.appendChild(newForm);
     };
 };
函数myFunction(元素){
var id=element.id;
var taskDone=element.value;
var i=id.split('taskDone')[1];
var newForm=document.createElement('form');
对于(var j=0;j
有关更多详细信息和帮助,请参见代码段:

var btnSubmit=document.getElementById('startSubmit');
console.log(btnSubmit);
btnSubmit.addEventListener('click',函数(e){
e、 预防默认值();
var myForm=document.createElement('form');
var period=document.getElementById('period')。值;
对于(变量i=0;i


这与Java有什么关系?本来应该是JavaScript,但我想我没有足够的空间谢谢,伙计,昨天我一直在尝试这样做,我花了一整天的时间处理错误我知道哪里出了问题,但我不知道如何修复它