0

いくつかのテキスト入力と1つのファイルタイプ入力を含むフォームがあり、選択したファイルがPDFであるかどうかを確認しようとしています。私はこのようにしています:

$("#myform").bind("submit", function() {
    var ext = $('#file_input').val().split('.').pop().toLowerCase();
    if($.inArray(ext, ['pdf']) == -1) {
        alert('ERROR!');
    }
});

しかし、上記のコードの一部には1つの不足があります-ファイル入力(ファイルがDOCである)を除くすべての入力が有効であり(=>ファイル入力が無効である)、[送信]ボタンをクリックすると、が表示されます警告メッセージエラー!、ただし、フォームは送信されます。

ファイルタイプが有効でない場合、どうすればフォームの送信を「停止」できますか?

4

4 に答える 4

2

これを試して:

$("#myform").bind("submit", function(e) {
    var ext = $('#file_input').val().split('.').pop().toLowerCase();
    if($.inArray(ext, ['pdf']) == -1) {
      e.preventDefault(); //Prevents the default action which is form submit
      alert('ERROR!');
    }
});
于 2012-07-09T13:39:03.823 に答える
2

これを行うことでコードを短縮できます。

if (!(/\.pdf$/i).test($('#file_input').val())) {
  // not valid, do what you like here
  // return false to prevent submit
  return false;

falseを返すことにより、フォームを送信できなくなります。フォーム送信イベントのpreventDefaultはIE7/8で機能していませんが、falseを返すとジョブが実行されます。

于 2012-07-09T13:40:23.550 に答える
2

イベントにバインドされたjQueryコールバック関数には、2つのオプションがあります。

イベントへの参照を無名関数に渡して、次を呼び出すことができますe.preventDefault()

$('#myform').bind('submit', function(e) {
    e.preventDefault();

    // Your code
});

e.preventDefault()デフォルトの機能(この場合、フォームの送信)を防ぎます。

またはreturn false、デフォルトの機能イベントのバブリングの両方を防ぐことができます。を呼び出すのと同じe.preventDefault(); e.stopPropagation()です。

于 2012-07-09T13:41:03.817 に答える
0

2つの方法があります:

  1. コードをそのままにして、次を追加しreturn falseます。

    $("#myform").bind("submit", function() {
    var ext = $('#file_input').val().split('.').pop().toLowerCase();
    if($.inArray(ext, ['pdf']) == -1) {
        alert('ERROR!');
        return false;
    }
    });
    
  2. イベントを受け入れてpreventDefault()を使用するように関数シグネチャを変更します。

     $("#myform").bind("submit", function(e) {       
    var ext = $('#file_input').val().split('.').pop().toLowerCase();
    if($.inArray(ext, ['pdf']) == -1) {         
      alert('ERROR!');
      e.preventDefault();
    }
    });
    
于 2012-07-09T13:42:22.787 に答える