Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 单击“清除最后一个文件输入”_Jquery_File Upload_Input - Fatal编程技术网

Jquery 单击“清除最后一个文件输入”

Jquery 单击“清除最后一个文件输入”,jquery,file-upload,input,Jquery,File Upload,Input,我有一个带有文件输入和两个文本框的表单。如果需要上传多个文件,则可以复制所有3个输入。我试图在每个div的末尾添加一个clear按钮,允许用户清除文件输入的值。但就我的一生而言,我无法让它发挥作用 我正在尝试使用.last(),但它似乎没有在复制div后选择最后一个文件输入 我的代码如下 <div class="certificates_list"> <input type="file" name="user_certificates[]" class="user_ce

我有一个带有文件输入和两个文本框的表单。如果需要上传多个文件,则可以复制所有3个输入。我试图在每个div的末尾添加一个clear按钮,允许用户清除文件输入的值。但就我的一生而言,我无法让它发挥作用

我正在尝试使用
.last()
,但它似乎没有在复制div后选择最后一个文件输入

我的代码如下

<div class="certificates_list">
    <input type="file" name="user_certificates[]" class="user_certificate" />
    <input type="text" name="certificate_name[]" class="right certificate_name" placeholder="Certificate name" />
    <input type="text" name="expiry_date[]" class="expiry_date" placeholder="DD/MM/YYYY" />
    <button class="clear_certificate">Clear</button>
</div>

$(function() {
    $('.clear_certificate').click(function(event) {
    event.preventDefault();
    $('input[type="file"].user_certificate').last().val('');

    });
});

清楚的
$(函数(){
$('.clear_certificate')。单击(函数(事件){
event.preventDefault();
$('input[type=“file”].user_certificate').last().val(“”);
});
});
如果我只有一个带输入的div,它会很好地清除它。一旦该div被复制,上一个div将不再被清除

有什么想法吗?谢谢你的帮助,非常感谢

编辑

我已经为我的问题创建了一个解决方案,希望这有助于您编写[type=“file”]只匹配type=“file” 您的html只有一个文件输入

html-CODE:

<div class="certificates_list">
    <input type="file" name="user_certificates[]" class="user_certificate" id="user_certificate_0" />
    <input type="text" name="certificate_name[]" class="right certificate_name" placeholder="Certificate name" id="certificate_name_0" />
    <input type="text" name="expiry_date[]" class="expiry_date" id="expiry_date_0" placeholder="DD/MM/YYYY" />
    <button id="clear_certificate_0" class="clear_certificate">Clear</button>
</div>
<div id="certificates_new"></div>
<p><button type="button" id="add_certificate">Add another certificate</button></p>

清楚的
添加另一个证书

JS:

var i=1;
$(“#添加_证书”)。单击(函数(){
var-sHtml='';
sHtml+='';
sHtml+='';
sHtml+=‘清除’;
$(“#证书"新”).append(sHtml);
i++;
});
$(document).on(“单击“,”。清除证书”,函数(){
var arrID=$(this.attr(“id”).split(“”);
var ID=arrID[2];
$('#用户证书'+ID).val('');
$('到期日'+ID).val('');
$('#证书u名称'+ID).val('');
});

所以现在这应该很好。。。您应该对代码进行改进,以将其缩短一点,但功能是给定的。

这应该可以完成您尝试执行的操作:

$(".clear_certificate").click(function(){
   $(".certificates_list").children("input[type=file]:last-child").each(function(){
         // Do stuff here
   });
});

最好给包装器div一个id,然后执行$(“#idOfDiv”)。孩子们……

你到底在复制什么?听起来您需要为事件使用而不是
。单击()
,因为它只注册DOM中已加载的内容,而不是将来的元素。行是什么意思?我是说div,它在屏幕上被设置为行。我的错。更新了我的问题我正在复制所有3个输入查看一个示例,正如我在问题中所说,当单击按钮时,输入会被复制。我没有把它包括在我的问题中,因为我认为它不相关。您使用的是最新的jQuery版本吗?或者得到任何错误?是的,是最新版本,不,我根本没有得到任何错误。设置计数器(var i=1)并向每个添加的输入字段添加id(即“用户证书”+i),以便您可以根据其id选择最新的输入字段,这是一个选项吗?知道我想说什么吗?:)并证明是否调用了onclick函数。也许它永远不会被调用用JSFIDLE复制我的问题用JSFIDLE更新我的问题
$(".clear_certificate").click(function(){
   $(".certificates_list").children("input[type=file]:last-child").each(function(){
         // Do stuff here
   });
});