4

我有一个通过 $.ajax 请求加载 HTML 表单的页面。

该表单有一个文件上传选项。我尝试了几个 Ajax 上传插件,它们都要求我实例化一些 ajaxUpload() 类型的对象,该对象在内部创建点击侦听器。然而,这些监听器不会触发,因为动态加载的表单不是 DOM 可访问的。

过去为了解决这些问题,我使用 live() 来收听。但我不能将这些 ajaxUpload 实例声明为实时事件。那么我怎样才能让这个上传按钮起作用呢?

4

7 回答 7

1

我似乎记得,从某个地方,livequery插件可以处理这种类型的事情。在我寻求真相的过程中,我遇到了这样的事情:

jQuery中复制元素的绑定问题

于 2010-02-01T21:44:05.633 回答
1

AJAX 无法上传文件。jQuery 表单插件使用隐藏 iframe 技术上传文件。要进行真正的 AJAX 上传,您可以使用基于 Flash 的上传器。我建议您尝试uploadify

于 2010-02-02T01:52:32.870 回答
1

你是什​​么意思一旦你用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');
于 2010-02-03T07:21:39.793 回答
0

您可以将动态加载的表单添加到文档中吗?(然后实例化ajaxUpload对象''之后''表单被添加到文档中)

于 2010-02-01T22:16:49.343 回答
0

这是迄今为止我能做到的最好的:

$('#uploadButton').live('click', function(){                
    new AjaxUpload('uploadButton', {
       action: 'upload-handler.php',
       onComplete: function(file, response){
        alert(response);
       });
});

live() 有效,但它仅在单击后实例化对象。所以我需要再次单击它才能使上传触发器起作用。

所以我一直试图以某种方式删除额外的点击。我希望以下内容在函数结束时起作用,但它没有:

$(this).trigger("click");
于 2010-02-02T16:49:16.617 回答
0

我已经通过使用不同的上传插件 https://github.com/valums/file-uploader解决了这个问题

这允许我在任何需要的时间调用一个函数来从 DOM 元素创建一个上传器。所以我只有在需要上传器时才能调用该函数。这样我就不需要依赖现场活动。

于 2011-02-08T18:14:17.710 回答
0

@lawrence 谢谢,我遇到了同样的问题,在将 html 作为表单部分加载后,congaing 上传元素,我必须点击两次。虽然我在加载 html 后尝试了很多方法来重新绑定点击句柄但失败了。

在页面的末尾我读到了这个 $(this).trigger("click"); 我将其更改为适合我并放置在 ajax 调用结束时,它可以工作。jQuery("#upload").trigger("点击"); 万岁...谢谢大家。

于 2011-04-07T14:11:50.123 回答