【问题标题】:jQuery append() and remove() elementjQuery append() 和 remove() 元素
【发布时间】:2010-12-02 20:07:11
【问题描述】:

我有一个表单,我在其中动态添加了使用附加功能上传文件的功能,但我也希望能够删除未使用的字段。这是html标记

<span class="inputname">Project Images:
    <a href="#" class="add_project_file"><img src="images/add_small.gif" border="0"></a>
</span>
<span class="project_images">
    <input name="upload_project_images[]" type="file" /><br/>
</span>

现在,如果他们单击“添加”gif,则会使用此 jquery 添加新行

$('a.add_project_file').click(function() {
    $(".project_images").append('<input name="upload_project_images[]" type="file" class="new_project_image" /> <a href="#" class="remove_project_file" border="2"><img src="images/delete.gif"></a><br/>');
    return false;
});

要删除输入框,我尝试添加类“remove_project_file”,然后添加此函数。

$('a.remove_project_file').click(function() {
    $('.project_images').remove();
    return false;
});

我认为应该有一个更简单的方法来做到这一点。也许我需要使用 $(this) 函数进行删除。另一种可能的解决方案是扩展“添加项目文件”以添加和删除字段。

你们中的任何一个 JQuery 向导都有任何很棒的想法

【问题讨论】:

  • 您使用 project_images 作为类而不是 ID 是否有原因?
  • 并非如此,我倾向于对可能在页面上出现多次的元素使用类,而对只会使用一次的元素使用 ID。这里没有真正的理由我使用类而不是 ID

标签: jquery append


【解决方案1】:

由于这是一个开放式问题,我只想告诉你我将如何自己实现这样的事情。

<span class="inputname">
    Project Images:
    <a href="#" class="add_project_file">
        <img src="images/add_small.gif" border="0" />
    </a>
</span>

<ul class="project_images">
    <li><input name="upload_project_images[]" type="file" /></li>
</ul>

将文件输入包装在li 元素中可以在单击时轻松删除“删除”链接的父级。这样做的 jQuery 接近于你已经拥有的:

// Add new input with associated 'remove' link when 'add' button is clicked.
$('.add_project_file').click(function(e) {
    e.preventDefault();

    $(".project_images").append(
        '<li>'
      + '<input name="upload_project_images[]" type="file" class="new_project_image" /> '
      + '<a href="#" class="remove_project_file" border="2"><img src="images/delete.gif" /></a>'
      + '</li>');
});

// Remove parent of 'remove' link when link is clicked.
$('.project_images').on('click', '.remove_project_file', function(e) {
    e.preventDefault();

    $(this).parent().remove();
});

【讨论】:

  • 谢谢谢谢谢谢!我从来没有听说过“现场”,但我知道这很方便。另外,使用
  • 作为文件列表的好处是什么。这样我们就可以只删除我们想要的一个文件上传了吗?
  • 是的,这样我们就可以轻松地单独删除每个输入。它也是您的内容(文件列表)的更语义化的表示。如果您愿意,也可以轻松地将它们包装在 spandiv 标记中。
  • 哦,live 只是最新版本的 jQuery (v1.3+) 中的一个功能 - 你没有听说过它并不奇怪。
  • .live 已弃用,从现在开始应使用 .on()。
  • 【解决方案2】:

    您可以在追加之前调用重置函数。像这样的:

        function resetNewReviewBoardForm() {
        $("#Description").val('');
        $("#PersonName").text('');
        $("#members").empty(); //this one what worked in my case
        $("#EmailNotification").val('False');
    }
    

    【讨论】:

      猜你喜欢
      相关资源
      最近更新 更多
      热门标签