0

multipleASP.NETを使用してマルチファイルアップローダーを作成していますが、IEが内部の属性をサポートしていないことを知っています<input type="file"/>

そこで、ユーザーがIEを使用しているかどうかをチェックするjQueryコードを作成しました。はいの場合は、ユーザーが複数のファイルアップロードコントロールを追加できるようにするボタンを表示して、ユーザーが複数のファイルをアップロードできるようにします。

問題は、ユーザーがそのリンクをクリックして<input/>コントロールを生成し、もう一度クリックして3番目のリンクを追加するとです。何も起こらない!..追加されるコントロールは1つだけなので、使用するコントロールは2つになります。それ以上、彼がいくらクリックしても、それ以上の<input/>コントロールは追加されません。

これが私のコードです:

$(function () {
    if (!('multiple' in document.createElement('input'))) {
        var add_btn = $("<a href='#'>Add more photos</a>").insertAfter("#ContentPlaceHolder1_upload_lbl");
        var upload_pnl = $('<input type="file" runat="server"/>');
        var upload_holder = $("#fileinput_placeholder");
        add_btn.on("click", function () {
            upload_holder.append(upload_pnl);
            alert("click event called(debugging)");
        });
    }
});

これがその部分のノードツリーの写真です:

ここに画像の説明を入力してください

4

2 に答える 2

2

を追加しているクリックイベントupload_pnlで、連続してクリックするたびに同じ要素を追加しているため、2つしか得られません。

さらに追加するには、クリック イベント コールバック内に要素を作成するか、jquery クローン関数などを使用して新しい要素を作成する必要があります。

var upload_pnl = $('<input type="file" runat="server"/>');
var upload_holder = $("#fileinput_placeholder");
add_btn.on("click", function () {
    upload_pnl.clone().appendTo(upload_holder);
    alert("click event called(debugging)");
});

また、fscan が指摘したように、runat="server" は、ページが現在クライアント側であるため、コード ビハインドでこの新しい要素にアクセスできないようにします。

于 2013-01-16T02:35:52.197 に答える
2

まず、追加で挿入するたびに新しい要素を作成する必要があります。Append は、古い親から要素を移動します。第二に、runat="server" afaik は asp.net 属性であり、html ではまったく何もしません。JavaScriptで要素を作成する場合は、投稿を行って自分で詰め込む必要があります。

于 2013-01-16T02:41:43.247 に答える