【问题标题】:How to add new fields to current Form on the fly?如何即时向当前表单添加新字段?
【发布时间】:2014-10-02 14:44:50
【问题描述】:

假设我们在 HTML 页面中有一个表单。通过填充特定字段或为某些单选按钮或选择标签选择值来显示和消失某些字段是一种非常常见的行为。这可以使用 Java 脚本来完成。我想知道是否可以通过触发 ajax 调用向 CURRENT 表单添加一些新字段。这可能吗?

如果我想通过 ajax 调用与服务器通信来在页面上添加一些新字段,我应该在页面中添加一个包含这些字段的新表单还是可以使用我当前的表单?

【问题讨论】:

  • 请提供更多关于如何添加新字段的说明。表示在什么情况下,什么时候。可以在表单中动态添加新字段。
  • 我想在我当前的表单中添加一个新字段(比如说输入字段),例如在单击单选按钮后触发 Ajax 调用!我知道使用 JavaScript 是可能的。但在这种情况下,该字段在隐藏时应该存在于当前 DOM 上。但是,我想知道是否有可能有一个表单,它首先具有两个输入字段,并且在触发 Ajax 调用后将具有三个输入字段。这可能吗?

标签: javascript html ajax forms


【解决方案1】:

是的,只需将用于附加表单的代码放在 ajax 成功回调中即可。 这是一个 jsfiddle,假设您从 ajax 调用中获取 json。 只需在第二个字段中输入 ajax(模拟进行 ajax 调用的条件),它会抓取一个虚假的 json 响应,并会根据该数据生成带有字段名称的额外字段。

http://jsfiddle.net/ua47escq/1/

<ul>
<form action="" id ="myform">

<li> some field <input type="text"> </li>
<li> other field <input type="text" id = "myinput"></li>
<input type="submit" name="submit" id="submit">

</form>
</ul>
<script>
var myinput = document.getElementById("myinput");
var form = document.getElementById("myform");
var submit = document.getElementById("submit");
var fragment = document.createDocumentFragment();
var fakejson = JSON.stringify([{
                "fieldname": "dynamic field1"
            }, {
                "fieldname": "dynamic field2"
            }, {
                "fieldname": "dynamic field3"
            }]);

myinput.addEventListener("keyup", function(evt) {
        if (evt.target.value == "ajax") {
            sucsess(fakejson);
        }
    });


function appendform(name) {
    var li = document.createElement("li");
    var newinput = document.createElement("input");
    newinput.setAttribute('type', 'text');
    newinput.setAttribute('name', name);
    li.textContent = name;
    li.appendChild(newinput);
   form.insertBefore(li, submit);


}

function sucsess(data) {

    var json = JSON.parse(data);
    for (key in json) {
        appendform(json[key]["fieldname"]);
    }
}

【讨论】:

  • 非常感谢。你能告诉我如何使用你的代码触发这个ajax调用吗?我了解您写的内容,但我不知道如何在按“提交”按钮之前添加另一个字段。
  • 我对小提琴进行了一些更改,以使用 jsfiddle json echo 进行 ajax requet jsfiddle.net/ua47escq/7
  • 哦,ajax 函数是由事件处理程序触发的(它以 myinput.addEventListner 开头),它在第二个字段上侦听 keyup 事件,如果输入单词 ajax,它会触发 ajaxcall() 函数.因此,如果您在第二个字段中键入单词 ajax 后不按提交,事件列表器将调用 ajaxcall()。您可以更改逻辑以满足您的实际需求。所以基本上,每当你调用 ajaxcall() 时,它都会进行调用并创建字段。
  • 非常感谢。我终于看到了结果。但是,只是一个问题。我应该能够在 DOM 上看到这些新字段吗?我的意思是,在代码的 HTML 部分中,表单只包含两个字段。触发这个 ajax 调用后,它应该包含五个字段,我应该能够在 DOM 中看到这些新字段,对吧?由于此表单将与所有这些字段一起提交。我说的对吗?
  • 好吧,如果您通过视图源查看 DOM,它只会显示静态内容。要查看由 javascript 完成的动态更改,您需要使用开发人员工具。在浏览器中右键单击新生成的文件,然后从菜单中选择“检查元素”。检查器面板将打开,您将看到新字段。或者,您可以按 f12 打开开发者工具。在工具面板中单击元素选项卡,您将看到 DOM 实时变化。你使用的是什么浏览器? Chrome 有很好的开发者工具。但所有其他浏览器也有开发工具。
猜你喜欢
  • 1970-01-01
  • 2018-05-27
  • 2013-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
  • 2012-04-18
相关资源
最近更新 更多