2012-01-22 15 views
2

以下は、JQueryスクリプトで行いたいことです。以下のサブミット関数(4番目)では、フォームにファイル入力があり、ajaxまたはajaxのない通常のフォームだけを送信するかどうかを決定したいと思います。つまり、フォームにアップロードがある場合は、通常の送信を行います。JQuery内部から送信するフォームを送信する

以下の送信機能で質問を書いています。それが私がそれを働かせるために必要とする唯一のものです。

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

function FindFileInput(){ 
    // check for file input 
    var FileInput = $('input:file'); 
    if(FileInput.length > 0){ 
     return true; 
    }else{ 
     return false; 
    } 
} 

function validation(){ 
    // code to validate form 
    ... 
} 

function ajaxSubmit(formData){ 
    $.ajax({ 
     // ajax submit code 
    }); 
} 

$(myForm).submit(function(e){ 
    e.preventDefault(); 

    // 1. if NO file input present 
    if(FindFileInput() === false){ 
     if(validation() === true){ 
     // serialize and call ajaxSubmit function 
     } 
    } 

    // 2. if file input IS present 
    if(FindFileInput() === true){ 
     if(validation() === true){ 
     // QUESTION: How do I submit the form here??? 
     } 
    } 
}); 

答えて

3

http://api.jquery.com/submit/から:

フォームが送信されたときに今、メッセージが警告されます。実際に送信する前に が発生するため、によって送信アクションを取り消すことができます。イベントオブジェクトで.preventDefault()を呼び出すか、偽の をハンドラから返すことができます。

だからあなたのロジックが好転:別の 要素がクリックされたときに、私たちは手動でイベントをトリガすることができます。 e.preventDefault()をデフォルトとして呼び出してから元に戻しますが、実際に必要なときに呼び出します。

$(myForm).submit(function(e){ 

    // 1. if NO file input present 
    if(FindFileInput() === false){ 
     if(validation() === true){ 
      ajaxSubmit(formdata); 
     } 
    } 

    // 2. if file input IS present 
    if(FindFileInput() === true){ 
     if(validation() === true){ 
      return true; // submit form as normal, don't call e.preventDefault() 
     } 
    } 

    // Prevent form from submitting normally 
    e.preventDefault(); 
    return false; 
}); 
+1

ありがとうございました!上記の提案も同様に機能しましたが、これはプログラミングと学習の観点からは理にかなっています。 – user1002039

0

送信を続行したい場合は、デフォルトの動作を妨げずにtrueを返します。あなたが実際に(したがって、ファイルが選択されている場合)デフォルトの方法を掲載しているからフォームを停止する場合にのみ

$(myForm).submit(function(e){ 

    if(!FindFileInput()){ 
     if(validation()){ 
      //AJAX method 
     } 
    }else{ 
     if(validation()){ 
      return true; 
     } 
    } 
    e.preventDefault(); 
    return false; 
}); 
0

はそうe.preventDefault()を呼び出さないでください早く、それを行います。そうすれば、2番目のif文を取り除くことができ、送信するファイルがあるときにサブミットJS関数が何もしないようにすることができます。こうすると、ファイルが選択されていない場合、フォームがデフォルトの方法で送信されます。

http://jsfiddle.net/4buHP/

ネイティブ.submit()はjQueryのイベントを発生しません。

$(myForm).submit(function(e){ 

    // 1. if NO file input present 
    if(FindFileInput() === false){ 
     if(validation() === true){ 
     e.preventDefault(); 
     // Do your AJAX-stuff here 
     } 
    } 

}); 
0

this.submit()あなたは<input name="submit" />

デモのようなもので、それを上書きしていないことを条件とします。

0

シンプル!私はe.preventDefault()を削除しました。その他いくつかの条件を追加しました。しかし、私は非常に手続き的な(あまり理想的ではない)ソリューションを提供しました。

$(myForm).submit(function(e){ 

    // 1. if NO file input present 
    if(FindFileInput() === false){ 
     if(validation() === true){ 
     // serialize and call ajaxSubmit function 

     return false; // stops form submissions, same as preventDefault but less chars. 
     } 
    } 

    // 2. if file input IS present 
    if(FindFileInput() === true){ 
     if(validation() === true){ 
     // QUESTION: How do I submit the form here??? 
     // no return false, moves forward. 
     } else { 
      return false; 
     } 
    } else { 
     return false; 
    } 
}); 
関連する問題