1

我有添加附件链接,如果单击该链接将创建文件输入和删除链接。例如,我添加了 3 个文件输入,如果用户单击文件输入 2 的删除链接,它将删除文件输入 2 而不是最后一个文件输入,因此它只会删除相应的文件输入。

如何为这种情况编写 jquery 代码?还如何安排文件输入以便垂直添加?我正在使用 Jasny Bootstrap<input type="file"/>

在此处输入图像描述

看法:

<div class="form-group">
    <label class="control-label col-md-2">Attachment</label>
    <div class="col-md-10">
        <div id="attachments">
        </div>
    </div>
</div>
<div class="form-group">
    <div class="col-md-2"></div>
    <div class="col-md-10"><a href="#" id="addAttachment">Add More</a></div>
</div>

脚本:

$(document).ready(function () {
            $("#addAttachment").click(function () {
                $("#attachments").append("<div class='fileinput fileinput-new' data-provides='fileinput'><span class='btn btn-default btn-file'><span class='fileinput-new'>Select file</span><span class='fileinput-exists'>Change</span><input type='file' name='myFile'></span><span class='fileinput-filename'></span><a href='#' class='close fileinput-exists' data-dismiss='fileinput' style='float: none'>&times;</a></div>")
            });
        });
4

2 回答 2

2

在发布 StackOverflow 问题时,您应该始终与http://jsbin.com分享您的代码演示。

我不知道您如何创建元素以及如何初始化它们。但这里有几个例子。

方法一:使用闭包记住每个按钮属于哪个元素

您在 addmore 按钮上的单击事件期间创建一个新元素。此时,您已经创建了一个元素,您可以将它的删除按钮绑定到元素本身:

$('.addmore').click( function(event) {
  event.preventDefault();

  var randomString = (Math.random() + 1).toString(36).substring(7);

  var $newElement = $("<div class='element'>" +
    "  <span class='element-content'>" +
    "     Element content " + randomString +
    "  </span>" +
    "  <a href='#!' class='element-delete'>Delete</a>" +
    "</div>");

  $newElement.appendTo($('body'));

  var $removeButton = $newElement.find('.element-delete');

  $removeButton.click( function(event) {
    event.preventDefault();
    $newElement.remove();
  });

});

演示: http: //jsbin.com/damag/3/edit ?html,js,output

方法二:遍历DOM查找点击的按钮属于哪个元素

您在代码的一个位置创建元素,并在代码的另一个位置对它们的删除做出反应。

单击删除按钮时,您不知道它对应于哪个元素。好吧,我们必须弄清楚!

$('.element-delete').click( function(event) {
  event.preventDefault();

  var $clickedButton = $(event.target);
  var $element = $clickedButton.closest('.element');
  $element.remove();
});

演示: http: //jsbin.com/damag/4/edit ?html,js,output

此示例看起来更简单,但这是因为它不包含将示例应用于动态创建的元素的代码。您必须自己弄清楚(或使用更多详细信息和http://jsbin.com演示更新您的问题,并对我的回答发表评论,以便我注意到您的更新)。

于 2014-05-09T03:53:32.647 回答
1

这是基本思想:

http://jsfiddle.net/xf7vJ/4/http://jsfiddle.net/xf7vJ/5/

html

<button>duplicate</button>

<div class='clone'>
    <textarea></textarea>
    <a href="#" class='delete'>x</a>
</div>

jQuery

// save into memory (just the first div.clone)
var theTextarea = $(".clone:eq(0)");

// clone the element (the true attr is important)
$("body").on('click', "button", function(){
 theTextarea.clone(true).appendTo("body");
});

// remove it
$(".delete").on('click',function(e){
    e.preventDefault();
 $(this).parent().remove();
});
于 2014-05-09T03:46:07.650 回答