【问题标题】:Issue with binding in jQuery for copied elementsjQuery中复制元素的绑定问题
【发布时间】:2009-10-04 06:12:14
【问题描述】:

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

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

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

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

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

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

非常感谢!

【问题讨论】:

  • 您应该添加代码示例。没有它真的很难理解。
  • 抱歉,我决定完全放弃 Uploadify 并改用 swfupload.org!

标签: javascript jquery html css ajax-upload


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您可以重载 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(...) 应该可以工作了。

    注意:您必须将重载的方法置于其他一切之上。

    【讨论】:

    【解决方案3】:

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

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

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

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

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-19
        • 1970-01-01
        • 1970-01-01
        • 2017-06-06
        • 1970-01-01
        相关资源
        最近更新 更多