4

$.ajaxリクエストを介してHTMLフォームをロードするページがあります。

フォームにはファイルアップロードオプションがあります。私はいくつかのAjaxアップロードプラグインを試しましたが、それらはすべて、クリックリスナーを内部的に作成するajaxUpload()タイプのオブジェクトをインスタンス化する必要があります。ただし、動的にロードされたフォームはDOMにアクセスできないため、これらのリスナーはトリガーしません。

過去にそのようなことを回避するために、私はlive()を使用してリッスンしました。しかし、これらのajaxUploadインスタンスをライブイベントとして宣言することはできません。では、どうすればこのアップロードボタンを機能させることができますか?

4

7 に答える 7

1

AJAX はファイルをアップロードできません。jQuery フォーム プラグインは、隠し iframe 技術を使用してファイルをアップロードします。実際の AJAX アップロードを行うには、Flash ベースのアップローダーを使用できます。uploadifyを試すことをお勧めします。

于 2010-02-02T01:52:32.870 に答える
1

どこかで、livequeryプラグインがこの種のことを処理できることを思い出したようです。真実を求めて、私はこれに出くわしました:

コピーされた要素の jQuery でのバインドに関する問題

于 2010-02-01T21:44:05.633 に答える
1

ajaxでフォームを取得すると、DOMでフォームにアクセスできないとはどういう意味ですか? なぜそうすべきではないのですか?

$.get(url_that_has_form, null, function(resp) {
    $('#some_container').html(resp);
    // Now the form is part of the document.
    // Run your ajax upload stuff here.
    new AjaxUpload('#id_of_form_you_just_added', options);
}, 'html');
于 2010-02-03T07:21:39.793 に答える
0

@lawrenceありがとう、私は同じ問題に直面していました。フォームパーツとしてhtmlをロードした後、アップロード要素をまとめて、2回クリックする必要があります。HTMLをロードした後にクリックハンドルを再バインドするために多くの方法を試しましたが、失敗しました。

ページの終わりに、私はこの$(this).trigger( "click");を読みました。自分に合うように変更して、ajax呼び出しの最後に配置すると、機能します。jQuery( "#upload")。trigger( "click"); フラ...みんなありがとう。

于 2011-04-07T14:11:50.123 に答える
0

動的に読み込まれたフォームをドキュメントに追加していただけますか? (次にajaxUpload、フォームがドキュメントに追加された後、オブジェクトをインスタンス化します)

于 2010-02-01T22:16:49.343 に答える
0

別のアップローダ プラグインを使用してこれを解決しました https://github.com/valums/file-uploader

これにより、任意の時点で DOM 要素からアップローダーを作成する関数を呼び出すことができます。したがって、アップローダーが必要な場合にのみ関数を呼び出すことができます。そうすれば、ライブイベントに頼る必要がなくなります。

于 2011-02-08T18:14:17.710 に答える
0

これが私がこれまでにできた最高のものです:

$('#uploadButton').live('click', function(){                
    new AjaxUpload('uploadButton', {
       action: 'upload-handler.php',
       onComplete: function(file, response){
        alert(response);
       });
});

live() は機能しますが、クリック後にオブジェクトをインスタンス化するだけです。そのため、アップロード トリガーを機能させるには、もう一度クリックする必要があります。

だから私はどうにかして余分なクリックを取り除こうとしてきました。関数の最後で次のことが機能することを期待していましたが、機能していません。

$(this).trigger("click");
于 2010-02-02T16:49:16.617 に答える