这实际上是一个更大的问题,因为我知道有几种方法可以解决这个问题,但我会尝试总结一下。
我尝试做什么:我正在使用此jQuery插件通过Flash http://www.uploadify.com/上传文件。但是,我应该绑定此函数的元素#fileInput是在页面加载后生成的实时元素:$('#fileInput')。uploadify()。 #fileInput是一个实时元素的原因是因为我使用FancyBox弹出一个DIV,这个FancyBox基本上只是“克隆”了DIV的内部html。
发生了什么:当我点击“浏览”上传文件时,没有上传进度条。原因是因为Uploadify无法绑定到实时元素。
问题: 1.我尝试用uploadify代码中的live()替换bind(),但是这不起作用,因为bind()允许传递[data]。 LiveQuery插件http://docs.jquery.com/Plugins/livequery与bind()的语法不同。有什么类似于绑定但适用于实时元素吗?
注意:FancyBox网站似乎已经死了 - > http://www.visual-blast.com/javascript/fancybox-jquery-image-zooming-plugin/
非常感谢!
答案 0 :(得分:1)
您可以考虑更改FancyBox代码以支持在克隆HTML后调用回调函数。然后,将uploadify()调用放入回调函数中。
答案 1 :(得分: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(...)
的所有实例替换为 live(...)
现在可以正常工作。
注意:您必须将重载方法放在其他所有方法之上。
答案 2 :(得分:0)
根据我的经验,我发现这样做的唯一方法是使用livequery
它具有类似的语法,在您的情况下,在live元素上绑定uploadify,您将使用
$('#fileInput').livequery(function(){
$(this).uploadify();
})
Livequery接受没有事件的函数,并在每次DOM发生变化时执行它们
答案 3 :(得分:0)
元素是如何生成的?如果使用jQuery从服务器获取它,你可以使用一种更为hackish的方法来修复它,只需将jQuery运行eval()放在它运行的任何脚本标记上,这样你就可以放置:
<script type='text/javascript'>
$(function(){
$('#fileInput').uploadify();
});
</script>
在获取的html中,它会在加载时将其绑定,而不是试图直播它。奖励积分,如果你再次获取HTML,它将是未绑定的。