2

这实际上是一个更大的问题,因为我知道有几种方法可以解决这个问题,但我会尝试总结一下。

我尝试做什么:我正在使用这个 jQuery 插件通过 Flash http://www.uploadify.com/上传文件。但是,我应该将此函数绑定到的元素#fileInput 是在页面加载后生成的活动元素:$('#fileInput').uploadify()。#fileInput 是一个活动元素的原因是因为我使用 FancyBox 来弹出一个 DIV,而这个 FancyBox 基本上只是“克隆”了 DIV 的内部 html。

发生了什么:当我点击“浏览”上传文件时,没有上传进度条。原因是 Uploadify 无法绑定到 live 元素。

问题: 1. 我尝试在uploadify 代码中将bind() 替换为live() 但这不起作用,因为bind() 允许传递[data]。LiveQuery 插件http://docs.jquery.com/Plugins/livequery也没有与 bind() 相同的语法。有什么类似于 bind 但适用于实时元素的东西吗?

  1. 如果我不尝试替换 bind() 函数并保持 uploadify 代码相同。有谁知道如何更改 FancyBox 中的代码,使其不会克隆以生成实时元素?我知道这也是一个难题。

注意:FancyBox 网站似乎已经死了 --> http://www.visual-blast.com/javascript/fancybox-jquery-image-zooming-plugin/

非常感谢!

4

4 回答 4

1

您可以考虑更改 FancyBox 代码以支持在克隆 HTML 后调用回调函数。然后,将uploadify() 调用放入回调函数中。

于 2009-10-06T20:38:11.020 回答
0

您可以重载该live方法,使其支持data作为第二个参数:

jQuery.fn.live = (function(_live){
    return function( type, data, fn ) {

        var _fn;

        if ( jQuery.isFunction(fn) ) {
            _fn = function(e) {
                e.data = data;
                return fn.call( this, e );
            };
        }

        return _live.call( this, type, _fn || fn || data );
    };
})(jQuery.fn.live);

bind(...)替换with的所有实例现在应该可以工作了。live(...)

注意:你必须把重载的方法放在其他一切之上。

于 2009-10-04T13:37:11.880 回答
0

元素是如何产生的?如果使用 jQuery 从服务器获取它,您可以使用更骇人听闻的方式来修复它,只需将 jQuery 运行 eval() 放在它运行的任何脚本标签上,这样您就可以输入:

<script type='text/javascript'>
$(function(){
    $('#fileInput').uploadify();
});
</script>

在获取的 html 中,它会在加载时绑定它,而不是尝试实时监视它。奖励积分,如果您再次获取 html,它将被取消绑定。

于 2009-10-17T12:04:24.530 回答
0

根据我的经验,我发现这样做的唯一方法是使用 livequery

它具有类似的语法,并且在您的情况下将 uploadify 绑定到实时元素上,您可以使用

$('#fileInput').livequery(function(){
  $(this).uploadify();
})

Livequery 接受没有事件的函数,并在每次 DOM 发生变化时执行它们

于 2009-10-15T14:36:17.153 回答