2009-10-04 58 views
2

這實際上是一個更大的問題,因爲我知道有幾種方法來解決這個問題,但我會嘗試總結它。問題綁定在jQuery複製元素

我試圖做的事:我使用這個jQuery插件通過Flash http://www.uploadify.com/上傳文件。然而,我應該綁定這個函數的元素#fileInput是一個活動元素,它在加載頁面後生成:$('#fileInput')。uploadify()。 #fileInput是一個活動元素的原因是因爲我使用FancyBox來彈出一個DIV,而這個FancyBox基本上只是「克隆」了DIV的內部html。

發生了什麼事:當我點擊「BROWSE」上傳文件時,沒有上傳進度條。原因是因爲Uploadify無法綁定到活動元素。

問題: 1.我嘗試在uploadify代碼中用live()替換bind(),但是因爲bind()允許傳遞[data],所以不起作用。 LiveQuery插件http://docs.jquery.com/Plugins/livequery不具有與bind()相同的語法。有沒有類似的綁定,但爲現場元素工作?

  1. 如果我不嘗試替換bind()函數並保持uploadify代碼相同。有誰知道如何更改FancyBox中的代碼,以便它不會生成克隆以生成活動元素?我知道這也是一個難題。

注:的fancybox網站似乎死 - >http://www.visual-blast.com/javascript/fancybox-jquery-image-zooming-plugin/

非常感謝您!

+0

更多評論? – 2009-10-05 07:40:03

+0

您應該添加代碼示例。沒有它真的很難理解。 – NVI 2009-10-15 08:45:29

+0

對不起,我決定完全刪除Uploadify並使用swfupload.org! – 2009-10-21 18:13:43

回答

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(...)應該現在的工作。

注意:您必須將重載的方法放在其他所有內容之上。

+0

我做了你的改變,常規方法(沒有活元素)現在也不工作。退房http://innovie.com/test/index.php js在這裏http://innovie.com/test/scripts/jquery.uploadify.v2.1.0.js – 2009-10-04 19:23:05

1

您可能會考慮更改FancyBox代碼以在克隆HTML後支持調用回調函數。然後,將uploadify()調用放入回調函數中。

0

從我的經驗,我發現做到這一點的唯一方法是使用的liveQuery

它有一個類似的語法,和你的情況結合uploadify通電元件上,你會用

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

Livequery接受沒有事件的函數,並且每次DOM中發生更改時都會執行它們。

0

元素是如何生成的?如果從使用jQuery服務器的獲取可以使用修復它更hackish的方式,簡單地說jQuery的運行的eval()上的任何腳本標記它運行到,所以你可以只把:

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

在取出的HTML它會在負載上綁定它,而不是試圖直接監視它。獎勵積分,如果你再次獲取html,它將被解除綁定。