2016-10-20 4 views
1

私はファイルアップロードスクリプトを作成しています。ファイルをアップロードする必要のあるディレクトリがいくつかありますが、これを行うには単一のフォームを使用しようとしています。フォームクラスをファイルアップロードに変更する

これで、JQUERYを使用して単一のフォームを使用するようにフォームクラスを変更できます。ここで

の形式である:

<form method="post" class="addFileClass" id="addFileForm" enctype="multipart/form-data"> 
    <input type="file" class="fileToUpload" name="fileToUpload" id="fileToUpload" /> 
    <button type="button" id="newfilesubmit">Upload</button> 
</form> 

これらのリンクは、私は、フォームクラスの変更を開始するために使用していますものです:

<a href="#" class="addDentalFile">Add Dental File</a> 
<a href="#" class="addLifeADDFile">Add Life ADD File</a> 
.....several more..... 

これらのhrefを使用して、私は、フォームクラスを変更するためのjQueryを使用することができます:

$('.addDentalFile').on('click', function(e) 
{ 
    e.preventDefault(); 
    $('#addFileForm').trigger('reset'); 
    $('#addFileForm').removeClass(); 
    $('#addFileForm').addClass('dentalFileForm'); 
    $('.addFileModal').modal('show'); 
}); 
......same format for the other links...... 

上記を使用して、フォームID#addFileFormのクラスを正常に変更できます。

これは私が立ち往生している場所です。現在のアップロードスクリプトは次のとおりです。

$('#newfilesubmit').on('click', function() 
{ 
    var formData = new FormData($('#addFileForm')[0]); // <-class should be passed here, but how when the class will be different? 
    $.ajax({ 
    url: 'api/uploadFile.php', 
    data: formData, 
    async: false, 
    contentType: false, 
    processData: false, 
    cache: false, 
    type: 'POST', 
    success: function(data) 
    { 
     // doing success stuff 
    }, 
    fail: function() 
    { 
     // doing fail stuff 
    } 
    }); 
}); 

上記のスクリプトは、IDが同じ場合に機能します。しかし、今ではフォームのクラスを使用しているので、JQUERYは新しいクラスを識別できる必要があります(私はそれを正しく言うことを望みます)。

このように、新しいクラスが渡されるたびに変数formDataを変更するにはどうすればよいですか?これが不可能な場合は、私に知らせてください。私が正しくあなたが#addFileFormに基づいていくつかの動作を変更したいあなたの質問を理解していた場合

var formData = new FormData($('form[class^="file-"]')[0]); 
+0

フォーム自体が変更されていない場合、それは何ですか?フォーム自体ではなく、クラス名に基づいてajax URLを変更したいと思うようです。この推論が正しくない場合は、質問を更新してより明確にしてください。 –

+0

両方のタイプのリンクで同じフォームを使用して送信していますが、1つのajaxサブミット操作もあります。フォームのクラスを変更して、どのようなメリットを享受したいですか?あなたは説明できますか? – gschambial

+0

@gsambial - すべての正直なところに、私は単なる別のファイルが提出されているときに単一のフォームを利用する最良の方法を見つけることを試みています。フォームクラスを変更することが悪い考えであれば、おそらく私はそのルートに行くべきではありません。 –

答えて

2

あなたはこうすることができます。送信ボタンをクリックすると、フォーム上に現在適用されているクラスに基づいてURLを取得します。

お願いします。

$('#newfilesubmit').on('click', function() 
    { 
     var formData = new FormData($('#addFileForm')[0]); // <- 
     var currentclass = $('form').attr('class'); 
     var currentUrl; 
     if(currenClass == 'dentalClass'){ 
     currentUrl = 'api/upload.php'; 
     }else if(currenClass == 'dentalClass'){ 
     currentUrl = 'api/someotherfile.php'; 
     } 
    //class should be passed here, but how when the class will be different? 
     $.ajax({ 
     url: currentUrl, 
     data: formData, 
     async: false, 
     contentType: false, 
     processData: false, 
     cache: false, 
     type: 'POST', 
     success: function(data) 
     { 
      // doing success stuff 
     }, 
     fail: function() 
     { 
      // doing fail stuff 
     } 
     }); 
    }); 
+0

あなたが提供したIFステートメントをtweekしなければなりませんでした。これは私のように1時間ほど狂ってしまった。しかし結局、これはまさに私のために働いたものです。クラスを渡して、適切なURLスクリプトを取得して必要なファイルをアップロードすることができます。 gschambialありがとうございます。私はあなたの答えを受け入れた。 –

+0

@JohnBeasley私の謝罪は、答えを更新しました。 – gschambial

0

クラス。これを行うには、次のようにしてクラスをチェックしてください:

switch($('#addFileForm').attr('class')){ 
case 'dentalFileForm': 
//do stuff 
break; 
//etc. 
} 
1

:あなたがそれらをfile-dentalのようなものを作ることができ、その後、あなたのJSセレクタがそうのように変更する代わりにdentalFileFormのようなクラスを使用しての

+0

これは私が探しているものだと思います。私はあなたに知らせようとします。 –

関連する問題