我有一个通过 $.ajax 请求加载 HTML 表单的页面。
该表单有一个文件上传选项。我尝试了几个 Ajax 上传插件,它们都要求我实例化一些 ajaxUpload() 类型的对象,该对象在内部创建点击侦听器。然而,这些监听器不会触发,因为动态加载的表单不是 DOM 可访问的。
过去为了解决这些问题,我使用 live() 来收听。但我不能将这些 ajaxUpload 实例声明为实时事件。那么我怎样才能让这个上传按钮起作用呢?
我似乎记得,从某个地方,livequery插件可以处理这种类型的事情。在我寻求真相的过程中,我遇到了这样的事情:
AJAX 无法上传文件。jQuery 表单插件使用隐藏 iframe 技术上传文件。要进行真正的 AJAX 上传,您可以使用基于 Flash 的上传器。我建议您尝试uploadify。
你是什么意思一旦你用ajax获取表单就不能在DOM中访问它?为什么不应该呢?
$.get(url_that_has_form, null, function(resp) {
$('#some_container').html(resp);
// Now the form is part of the document.
// Run your ajax upload stuff here.
new AjaxUpload('#id_of_form_you_just_added', options);
}, 'html');
您可以将动态加载的表单添加到文档中吗?(然后实例化ajaxUpload
对象''之后''表单被添加到文档中)
这是迄今为止我能做到的最好的:
$('#uploadButton').live('click', function(){
new AjaxUpload('uploadButton', {
action: 'upload-handler.php',
onComplete: function(file, response){
alert(response);
});
});
live() 有效,但它仅在单击后实例化对象。所以我需要再次单击它才能使上传触发器起作用。
所以我一直试图以某种方式删除额外的点击。我希望以下内容在函数结束时起作用,但它没有:
$(this).trigger("click");
我已经通过使用不同的上传插件 https://github.com/valums/file-uploader解决了这个问题
这允许我在任何需要的时间调用一个函数来从 DOM 元素创建一个上传器。所以我只有在需要上传器时才能调用该函数。这样我就不需要依赖现场活动。
@lawrence 谢谢,我遇到了同样的问题,在将 html 作为表单部分加载后,congaing 上传元素,我必须点击两次。虽然我在加载 html 后尝试了很多方法来重新绑定点击句柄但失败了。
在页面的末尾我读到了这个 $(this).trigger("click"); 我将其更改为适合我并放置在 ajax 调用结束时,它可以工作。jQuery("#upload").trigger("点击"); 万岁...谢谢大家。