Javascript 生成的输入字段未发布

标签 javascript php html forms

我正在构建一个表单,其中 JavaScript 允许字段重复的次数等于输入第一个表单输入字段的次数,例如第一个乘客的名字、第一个乘客的姓氏、第二个乘客的名字、第二个乘客的姓氏等。一旦提交按钮被按下,表单被发送到下一页。该表单包含从上一页发布的隐藏字段。这些隐藏字段以正确的值张贴,这让我相信表单生成代码中存在逻辑错误。在表单发布到的页面上,值是空白的,开发人员工具中的 HTML 代码读取 nopass 字段的 value=""。请注意,该代码没有语法错误,除了没有发布外,其行为符合预期,显示正确数量的字段,并且在更新影响它的字段时正确更新成本文本。

代码:

HTML 格式

<form name="bookpassdet" id="bookpassdet" method="post" action="bookconf.php">
<fieldset>
    <legend>Booking Reference no. <?php echo $bookref; ?></legend>
    <label class="amtofpass" for="amountofpassengers">Amount of Passengers</label>
    <input type="hidden" name="bookref" id="bookref" value="<?php echo $bookref?>">
    <input type="hidden" name="fromob" id="fromob" value="<?php echo $from?>">
    <input type="hidden" name="goingob" id="goingob" value="<?php echo $goingto?>">
    <input type="hidden" name="monthob" id="monthob" value="<?php echo $month?>">
    <input type="hidden" name="dayob" id="dayob" value="<?php echo $day?>">
    <input type="text" name ="amountofpassengers" id="nopass">
    <input type="checkbox" name="wheelchair" value="yes"> Wheelchair Required<br>
    <div id="container"/>
</fieldset>
</form>

JavaScript 生成输入字段

function addPassengers(e){
var pasobj=document.getElementById('nopass').value;
var container = document.getElementById("container");
while (container.hasChildNodes()){
    container.removeChild(container.lastChild);
}
for(var i =0;i<pasobj;i++){
    container.appendChild(document.createTextNode("Passenger " + (i+1)+" Forename"));

                var input = document.createElement("input");
                input.type = "text";
                input.id = ("pasforname"+i);
                container.appendChild(input);
                container.appendChild(document.createElement("br"));

    container.appendChild(document.createTextNode("Passenger " + (i+1)+" Surname"));
                var input = document.createElement("input");
                input.type = "text";
                input.id = ("passurname"+i);
                container.appendChild(input);
                container.appendChild(document.createElement("br"));

    container.appendChild(document.createTextNode("Passenger " + (i+1)+" Age"));
                var agearr = ["<2","3-10","11-16",">16"];
                var selectlist = document.createElement("select");
                selectlist.id=("myselect"+i);
                selectlist.name="myselect";
                container.appendChild(selectlist);
                container.appendChild(document.createElement("br"));
                for(var k =0; k<agearr.length; k++){
                    var option = document.createElement("option");
                    option.value = agearr[k];
                    option.text = agearr[k];
                    selectlist.appendChild(option);

                }


    var single_button = makeRadioButton(("journey"+i),"single","Single Journey",("single"+i));
    var return_button = makeRadioButton(("journey"+i),"return","Return Journey",("return"+i));
    container.appendChild(single_button);
    container.appendChild(return_button);
    container.appendChild(document.createElement("br"));

    container.appendChild(document.createTextNode("Cost: "));
        var text = document.createElement("p");
        text.id = ("costp"+i);
        container.appendChild(text);
        container.appendChild(document.createElement("br"));


    }

    var submit =document.createElement("input");
    submit.type = "submit";
    submit.id="subbutton";
    submit.value="test";
    container.appendChild(submit);



//add event listener to each created element in a loop where 
    if(window.addEventListener) {
        for(var m=0;m<pasobj;m++){
        document.getElementById("myselect"+m).addEventListener("change",calculateCost,false);
        document.getElementById("single"+m).addEventListener("change",calculateCost,false);
        document.getElementById("return"+m).addEventListener("change",calculateCost,false);
        }
        document.getElementById("subbutton").addEventListener("click",submitForm,false);
    } else if(window.attachEvent) {
        for(var m=0; m<pasobj;m++){
        document.getElementById("myselect"+m).addEventListener("change",calculateCost);
        document.getElementById("single"+m).addEventListener("change",calculateCost);
        document.getElementById("return"+m).addEventListener("change",calculateCost);
        }
        document.getElementById("subbutton").addEventListener("click",submitForm);
    }



}



 there are 3 other functions called makeRadioButton(name,value,text, id);
    calculateCost(e);
    prepareBookPassDet();

prepareBookPassDet 只是将事件监听器附加到调用 addPassengers 函数的 keyup 事件上的 nopass 表单字段

我尝试了什么:

我尝试通过使用请求而不是 post 来解决 php 方面的问题,但无济于事。

我已经能够将事件监听器附加到提交按钮,该按钮会创建一个弹出窗口,显示输入到 nopass 的值并显示正确的值。

这与发布的隐藏字段相结合让我相信输入到字段中的值以某种方式没有被提交,但是表单被提交了。

感谢您花时间阅读本文。我对 web 开发尤其是 JavaScript 缺乏经验,因此希望能用简单的术语解释任何解决方案,并且不包括框架,坚持使用基本的 php、html 和 javascript。再次感谢您。

最佳答案

要与表单数据一起发送,输入元素需要具有 name 属性。 id在此处不生效。这是因为可以有多个相同的名称,例如在单选按钮上,但只有唯一 ID 在 HTML 中有效。

在您的代码中:

var input = document.createElement("input");
input.type = "text";
input.id = 'pasforname'+i;
input.setAttrubute('name', 'pasforname'+i); 

关于Javascript 生成的输入字段未发布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54854784/

相关文章:

javascript - 无法在聊天应用程序中使用 Ajax 调用从 Controller 返回 html

javascript - 超大幻灯片从列表而不是 javascript 加载图像

javascript - 按 T​​ab 键附加输入字段

javascript - 自定义elfinder(一个jquery文件管理器插件)的右键菜单

html - 如何在框之间添加空间

javascript - 给定的 ResizeObserver 观察哪些元素?

php - Facebook PHP SDK v4.0.0 : $session is not set even after authorizing facebook from the login URL

php - PHP5保护变量背后的推理

html - 如何向我的网站添加新的 flaticons?

javascript - 为什么 Array.concat 在连接 jQuery 对象的二元素和三元素数组时会生成三元素数组?