动态创建文件输入时,jQuery 文件上传不起作用
jQuery File Upload not working when file input dynamically created
我正在使用这个 jquery 上传器 (http://blueimp.github.io/jQuery-File-Upload/basic.html),当文件输入放入站点的原始代码中时,它工作正常,但是我使用 jquery 动态附加字段并且它不起作用。 以下是触发上传的 jQuery:
$('.fileupload').fileupload({
dataType: 'json',
done: function (e, data) {
$.each(data.result.files, function (index, file) {
alert(file.name);
//$('<p/>').text(file.name).appendTo(document.body);
});
}
});
这是应该触发上传的内容:
<input class="fileupload" type="file" name="files[]" data-url="uploads/">
下面是 jquery 附加的代码:
$(document).on('click','.addItem', function(){
$('<!--ROW START-->'
<form class="widget-content item" data-url="uploads/">'
<div class="row">'
<div class="col-md-3"><input type="text" class="form-control" name="itemName[]"></div>'
<div class="col-md-3"><textarea class="auto form-control" name="itemDescription[]" cols="20" rows="1" style="word-wrap: break-word; resize: vertical;"></textarea></div>'
<div class="col-md-3"><textarea class="auto form-control" name="itemCondition[]" cols="20" rows="1" style="word-wrap: break-word; resize: vertical;"></textarea></div>'
<input type="hidden" class="itemId" name="itemId[]" value="">'
<input type="hidden" name="itemInventoryId[]" value="<?=$_GET["inventory_id"]?>">'
<input type="hidden" name="itemParent[]" value="'+$(this).closest('.formHolder').data('parent-room')+'">'
<div class="col-md-2">'
<div class="fileinput-holder input-group">'
<input class="fileupload" type="file" name="files[]">'
</div>'
</div>'
<div class="col-md-1 align-center"><i class="save icon-ok large"> </i> <i class="delete icon-trash large"> </i></div>'
</div>'
</form>'
<!--/ROW END-->').fadeIn(500).appendTo($(this).parents().siblings('.items'));
$(this).parent().parent().siblings('.widget-header, .header-margin, .hide').removeClass('hide').fadeIn();
});
就像我说的,当我将其添加到实际代码中时,而不是动态的。有人可以帮忙吗?
您在添加元素之前绑定fileupload
事件。
尝试将代码移动到回调函数中,该函数将在创建输入元素后执行。由于appendTo()
不支持回调,因此可以使用each(callback)
:
$('code_that_you_append').appendTo('some_element').each(function () {
// here goes $('.fileupload').fileupload({ ... }) function
});
如果需要在代码中的多个位置将事件绑定到.fileupload
,可以创建一个函数来避免代码重复,如下所示:
function bindFileUpload() {
$('.fileupload').fileupload({
dataType: 'json',
done: function (e, data) {
$.each(data.result.files, function (index, file) {
alert(file.name);
});
}
});
};
然后在回调中调用它,就像以前一样:
$('code_that_you_append').appendTo('some_element').each(function () {
bindFileUpload();
});
我创建了一个小演示。它绑定click
而不是fileupload
以简化事情(文件上传是外部插件......),但一般规则保持不变。
你需要使用 jQuery live() 函数。
我发现这个技巧对我有用。
j查询文件上传动态添加的输入字段
首先只需将上传函数与静态标识符绑定即可。在这里,"文档"是静态标识符。您可以使用尚未动态添加的此类内容。通常,文档的使用频率更高。
$(document).on('click', '.fileupload', function () {
$('.fileupload').fileupload({
dataType: 'json',
done: function (e, data) {
$.each(data.result.files, function (index, file) {
alert(file.name);
//$('<p/>').text(file.name).appendTo(document.body);
});
}
});
});
注意:请先查看接受的答案。
我认为接受的答案几乎没有错误。我只是想恢复它。在 @Micha ł Rybak 小演示中,您将看到每次我们单击add item
另一个单击事件也会添加到之前添加的new link
(添加更多然后new link
并查看第一个new link
显示警报次数的时间new item
)。因为每次添加new link
时,我们都会再次向所有new link
元素添加点击事件。
$('<p><a href="#" class="link">new link</a></p>').appendTo('body').each(function () {
// bindClickToLink call every 'new link' and add click event on it
bindClickToLink();
});
要解决此问题,请改为将单击事件添加到我们刚刚添加到新创建项目的所有项目中。这是我的解决方案我的演示.
- 删除表,但不删除表单和文件 jQuery
- Ruby on Rails:“找不到文件'jquery.ui.datepicker'”
- 从 html 页面调用文件 jQuery 文件
- Javascript 文件修改了未从中调用它的 html 文件?Jquery 选择器
- 未呈现Javascript文件/Jquery
- 上传文件jQuery ajax MVC
- 我在哪里可以得到这个文件jquery.min.js
- 使用委托点击按钮下载文件JQuery
- 找不到文件“jquery-ui”
- JavaScript文件(jQuery步骤)未在Google Chrome中加载
- 自动内联CSS从CSS文件(jquery?ajax吗?php ?)
- 如何使用本地json文件jquery或angularjs实现文本框的自动完成
- 在JSPX文件中包含JS文件(JQuery)
- 如何将变量值从后面的代码传递到外部JavaScript文件(jQuery文件)
- 如何获得扩展图像文件jquery.filer
- 检测设备和交换CSS文件- jQuery
- 警报文本从文件JQuery / javascript
- 如何排序日期和字符串在同一列在jquery插件有文件jquery. datatable .js
- 移动谷歌地图api代码到单独的文件+ jquery
- 获取按钮id从js文件和使用在另一个js文件- jquery