使用jquery动态创建表单并提交

use*_*375 12 html javascript jquery

我试图通过jquery动态创建一个表单并将其提交到PHP文件.这会创建表单但单击提交按钮时没有任何反应.这里出了什么问题?

我用来动态创建表单的方法是: -

    $('#share').append("<form action='sharer.php' method='POST'/>");
    $('#share').append("<div class= 'appm'>Save this/div/>");
    $('#share').append("<input type='text' placeholder='Name' name='routename' id='rname'/>");
    $('#share').append("<input type='text' placeholder='description' id='rdescription' name='routedescription' class= 'address'/>");
    $('#share').append("<input type='text' placeholder='tags' id='tags' name='routetags'  />");
    $('#share').append("<br><input type='submit' id='savebutton' value = 'Save' />");
    $('#share').append("</form>");
Run Code Online (Sandbox Code Playgroud)

Jef*_*oel 20

将所有添加到父元素的内容附加到其中,因此它们不会进入表单本身.解决这个问题的方法:

   $("#share").append('<form action="sharer.php" method="POST">');
   $("#share form").append('<div class="appm">Save this</div>');
   $("#share form").append('<input type="text" placeholder="Name" name="routename" id="rname"/>');
   $("#share form").append('<input type="text" placeholder="description" id="rdescription" name="routedescription" class="address"/>');
   $("#share form").append('<input type="text" placeholder="tags" id="tags" name="routetags"/>');
   $("#share form").append('<br><input type="submit" id="savebutton" value="Save" />');
Run Code Online (Sandbox Code Playgroud)

之后您不需要为表单附加结束标记.

工作小提琴


性能方面:纯JavaScript

(jsperf链接那里)

如果您真的想要一个好的性能解决方案,那就去寻找纯JavaScript代码:

var div = document.getElementById('share');
var form = document.createElement('form');
form.setAttribute('action', 'sharer.php');
form.setAttribute('method', 'POST');
/*-----------*/
var appm = document.createElement('div');
appm.appendChild(document.createTextNode('Save This'));
appm.setAttribute('class', 'appm');
/*-----------*/

var input1 = document.createElement('input');
input1.setAttribute('type', 'text');
input1.setAttribute('placeholder', 'Name');
input1.setAttribute('name', 'routename');
input1.setAttribute('id', 'rname');

var input2 = document.createElement('input');
input2.setAttribute('type', 'text');
input2.setAttribute('placeholder', 'description');
input2.setAttribute('name', 'routedescription');
input2.setAttribute('id', 'rdescription');
input2.setAttribute('class', 'address');

var tags = document.createElement('input');
tags.setAttribute('type', 'text');
tags.setAttribute('placeholder', 'tags');
tags.setAttribute('name', 'routetags');
tags.setAttribute('id', 'tags');

var submit = document.createElement('input');
submit.setAttribute('type', 'submit');
submit.setAttribute("value", "Save");
submit.setAttribute('id', 'savebutton');

form.appendChild(input1);
form.appendChild(input2);
form.appendChild(tags);
form.appendChild(submit);

div.appendChild(form);
Run Code Online (Sandbox Code Playgroud)

  • @ user1263375是的.由于你'追加()`内容INSIDE标签,这些标签是自动创建的(开始和结束标签).这与你做`var p = document.createElement("p")的行为相同; 使用document.createElement( "形式")的appendChild(P);`.这将是输出:`<form> <p> </ p> </ form>` (2认同)
  • 你可以像其他任何输入那样做:`$('#share form').append('<input type ="hidden"value ="Whatever"/>');`**类型**隐藏的输入是像常规**文本**输入,但它没有显示在内容流中. (2认同)

SpY*_*3HH 15

首先,有更简单的方法来编写它.其次,你没有在表格中添加任何内容.我会改写两种方式之一.

例1

<script type="text/javascript">
    $(function() {
        $('#share').append(
            $('<form />', { action: 'sharer.php', method: 'POST' }).append(
                $('<div />', { class: 'appm', text: 'Save this' }),
                $('<input />', { id: 'rname', name: 'routename', placeholder: 'Name', type: 'text' }),
                $('<input />', { class: 'address', id: 'rdescription', name: 'routedescription', placeholder: 'description', type: 'text' }),
                $('<input />', { id: 'tags', name: 'routetags', placeholder: 'tags', type: 'text' }),
                $('<br />'),
                $('<input />', { id: 'savebutton', type: 'submit', value: 'Save' })
            )
        )
    })
</script>
Run Code Online (Sandbox Code Playgroud)

使用示例1,您可能需要events动态设置.如:

<script type="text/javascript">
    $(function() {
        $(document).on('click', '#share form input[type=submit]', function(e) {
            e.preventDefault();
            /*  do work */
        })
    })
</script>
Run Code Online (Sandbox Code Playgroud)

例2

<script type="text/javascript">
    $(function() {
        var $form = $('<form />', { action: 'sharer.php', method: 'POST' }),
            frmSave = $('<div />', { class: 'appm', text: 'Save this' }),
            frmRName = $('<input />', { id: 'rname', name: 'routename', placeholder: 'Name', type: 'text' }),
            frmRDesc = $('<input />', { class: 'address', id: 'rdescription', name: 'routedescription', placeholder: 'description', type: 'text' }),
            frmRTags = $('<input />', { id: 'tags', name: 'routetags', placeholder: 'tags', type: 'text' }),
            frmButton = $('<input />', { id: 'savebutton', type: 'submit', value: 'Save' });

        $form.append(frmSave, frmRName, frmRDesc, frmRTags, $('<br />'), frmButton).appendTo($('#share'));
    })
</script>
Run Code Online (Sandbox Code Playgroud)

使用示例2,您可以稍后使用变量(甚至在需要时将它们设置为全局变量)并使用变量进行更改,例如:

<script type="text/javascript">
    $(function() {
        frmButton.on('click', function(e) {
            e.preventDefault();
            /*  do work */
        })
    })
</script>
Run Code Online (Sandbox Code Playgroud)


Kar*_*non 5

jQuery永远不会允许您在不关闭标签的情况下放置标签。因此,现在,您的代码创建了一个表单,并在该表单之后(不在内部)添加了元素。

但是您可以创建一个表单,将其保存在var中,然后将您的内容附加到var中。

var form = $('<form/>', {action : 'sharer.php', method : 'POST'}).appendTo('#share');
form.append("<div class= 'appm'>Save this</div>");
form.append("<input type='text' placeholder='Name' name='routename' id='rname'/>");
form.append("<input type='text' placeholder='description' id='rdescription' name='routedescription' class= 'address'/>");
form.append("<input type='text' placeholder='tags' id='tags' name='routetags'  />");
form.append("<br/><input type='submit' id='savebutton' value='Save' />");
Run Code Online (Sandbox Code Playgroud)

这也是最佳选择,因为您要缓存表单,而不是为每个追加创建jQuery对象!

工作提琴:http : //jsfiddle.net/Lb8BY/(附加到正文)