代码之家  ›  专栏  ›  技术社区  ›  Zack Peterson

如何使用javascript生成html表单?

  •  0
  • Zack Peterson  · 技术社区  · 15 年前

    我正在创建一个简单的web应用程序,用户可以使用它来编写带有附加文件的邮件。

    multiple html file inputs with javascript link http://img38.imageshack.us/img38/4474/attachments.gif

    “附加其他文件”链接还不起作用。它应该在每次单击表单时向其添加一个额外的文件输入控件。

    我需要一个javascript方法 addanotherfileinput() 要替换单击的锚定:

            <a href="#" id="attachlink" onclick="addanotherfileinput">attach additional files</a>
    

    使用此新表行、文件输入和定位:

            <input type="file" name="Attachment1" id="Attachment1" class="textinput" />
        </td>
    </tr>
    <tr>
        <td></td>
        <td>
            <a href="#" id="attachlink" onclick="addanotherfileinput">attach additional files</a>
    

    并增加编号:attachment2、attachment3、attachment4等。

    我该怎么做呢?

    3 回复  |  直到 15 年前
        1
  •  6
  •   Zoidberg    15 年前

    可以使用dom动态插入文件输入

    var myTd = /* Get the td from the dom */
    
    var myFile = document.createElement('INPUT');
    myFile.type = 'file'
    myFile.name = 'files' + i; // i is a var stored somewhere
    i++;
    
    myTd.appendChild(myFile);
    

    或者你可以用这个

    http://developer.yahoo.com/yui/examples/uploader/uploader-simple-button.html

        2
  •  1
  •   T.J. Crowder    15 年前

    你可能不想 代替 锚,在它前面插点东西就行了。

    我用 Prototype 对于这样的事情,因为它消除了很多浏览器不一致的地方,特别是在表单和表上。

    使用prototype,它看起来像这样:

    function insertFileField(element, index) {
        element.insert({
            before: "<input type='file' name='Attachment" + index + " class='textinput'>"
        });
    }
    
    // And where you're hooking up your `a` element (`onclick` is very outdated,
    // best to use unubtrustive JavaScript)
    $('attachlink').observe('click', function(event) {
        event.stop();
        insertFileField(this, this.up('form').select('input[type=file]').length + 1);
    });
    

    …结尾的位找到包含链接的表单,找出有多少 input 类型S file 有,并为索引添加一个。

    还有其他方法,通过 Element prototype提供的构造函数,但是文本工作得很好(实际上,它通常要快得多)。

    它与jquery、mootools、yui、glow或其他javascript框架类似,尽管略有不同。

        3
  •  1
  •   Mayo    15 年前

    可能有更好的方法,但是我在客户端创建了一组html表单元素,然后使用javascript隐藏/显示行以更新css类。

    编辑:我将这里作为一种替代方法,但我更喜欢通过dom添加输入元素的想法。