0

こんにちは、以下のコードを使用して、[フォームの作成] ボタンをクリックして div にフォームを動的に作成しています

$('#'+id).append('<div id="FileUpload"><fieldset><legend>Upload File To Iseries Server</legend><form id="FileUploadForm" action="" method="post" enctype="multipart/form-data"><label for="fileName">Select File: </label><input id="fileName" type="file" name="files" size="30" multiple /><br/><input type="submit" name="UploadFile" value="Upload" id="FileUploadButton"/></form></fieldset></div>');

入力ボックスの値を取得したいので、コードを追加しました:

$("input[name=UploadFile]").live("click",function(){
            $("input[name=files]").change(function() {
                alert($(this).val());   
            });

        });

今問題は、フォームの作成ボタンをクリックして、上記のクリック機能を直接呼び出してフォームを表示するたびに発生します。アップロードボタンをクリックしてもアラートメッセージが表示されなくなりました。現在、デバッグでクリックイベントが発生しています。私を助けてください !助けていただければ幸いです。

4

1 に答える 1

0

"input[name=files]"との両方"input[name=UploadFile]"が動的に作成されます。両方の委任イベント ハンドラーを作成する必要があります。

コードのもう 1 つの問題は、クリックする"input[name=files]"たびにイベント ハンドラーを追加することです。これにより、複数のイベント ハンドラーが追加されるという問題が発生する可能性があります。"input[name=UploadFile]"

この行:$("input[name=files]").change(function() {イベントハンドラーを追加するだけです。そのため、アラートは表示されません

また、 live は非推奨であるため、 live の代わりに$.onを試してください。

$(document).on("change","input[name=files]",function(){
    alert($(this).val());  
});

$(document).on("click","input[name=UploadFile]",function(){
            $("input[name=files]").trigger("change"); //trigger event instead of add event handler like in your code.
});
于 2013-12-28T09:06:09.820 に答える