2

この問題を解決するにはいくつかの方法があることを知っているため、これは実際にはより大きな問題ですが、まとめてみます。

私がやろうとしていること: この jQuery プラグインを使用して、Flash http://www.uploadify.com/経由でファイルをアップロードしています。ただし、この関数をバインドすることになっている要素 #fileInput は、ページが読み込まれた後に生成されるライブ要素です: $('#fileInput').uploadify()。#fileInput がライブ要素である理由は、FancyBox を使用して DIV をポップアップし、この FancyBox は基本的に DIV の内部 html を「複製」したためです。

何が起こったのか: ファイルをアップロードするために [参照] をクリックすると、アップロードの進行状況バーが表示されません。その理由は、Uploadify がライブ要素にバインドできなかったためです。

質問: 1. uploadify コードで bind() を live() に置き換えようとしましたが、bind() は [データ] を渡すことができるため、うまくいきませんでした。LiveQuery プラグインhttp://docs.jquery.com/Plugins/livequeryにも bind() と同じ構文はありません。バインドに似ているが、ライブ要素で機能するものはありますか?

  1. bind() 関数を置き換えようとせず、uploadify コードを同じに保つ場合。クローンを作成してライブ要素を生成しないように、FancyBox のコードを変更する方法を知っている人はいますか? これも難しい質問だと思います。

注: FancyBox サイトは停止しているようです --> http://www.visual-blast.com/javascript/fancybox-jquery-image-zooming-plugin/

どうもありがとうございました!

4

4 に答える 4

1

HTMLのクローンを作成した後のコールバック関数の呼び出しをサポートするようにFancyBoxコードを変更することを検討してください。次に、uploadify()呼び出しをコールバック関数に入れます。

于 2009-10-06T20:38:11.020 に答える
0

要素はどのように生成されますか? jQuery を使用してサーバーから取得した場合は、よりハックな修正方法を使用できます。実行するスクリプト タグに jQuery runs eval() を配置するだけで、次のように配置できます。

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

フェッチされた html では、ライブで監視しようとするのではなく、ロード時にバインドします。ボーナス ポイント。html を再度フェッチすると、バインドが解除されます。

于 2009-10-17T12:04:24.530 に答える
0

メソッドをオーバーロードして、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(...)のすべてのインスタンスをwith で置き換えても機能するようになりました。live(...)

注: オーバーロードされたメソッドを他のすべての上に配置する必要があります。

于 2009-10-04T13:37:11.880 に答える
0

私の経験から、これを行う唯一の方法は livequery を使用することです

同様の構文があり、あなたの場合、ライブ要素にアップロードをバインドするには、次を使用します

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

Livequery はイベントのない関数を受け入れ、DOM に変更があるたびにそれらを実行します

于 2009-10-15T14:36:17.153 に答える