2017-07-09 5 views
0

htmlのformがありますが、pdf、docx、docファイルのみが必要です。私は正常に検証することができますが、OKボタンをクリックすると、フォームが無効であれば投稿したくありません。現在、connection.phpに行きます。私は検証に成功したときだけconnection.phpに行くべきです。JSをHTMLフォームに使用してファイルタイプを検証した後で、無効な場合、同じページにコントロールする必要があります

<form method="POST" action="connection.php" enctype="multipart/form-data" onsubmit="function()"> 
<input type="text" id="name" name="bookname" placeholder="Book Name" required/> 
<textarea cols="25" rows="4" name="bookdesc" placeholder="Book Description" required></textarea> 
<input type="text" id="password" name="bookauthor" placeholder="Book Author"/ required> 
<input type="file" name="bookfile" id="bookfile" required/> 
</form> 
    <script> 
     $(document).ready(function() { 
     $('input[type=file]').change(function() { 
     var val = $(this).val().toLowerCase(); 
     var regex = new RegExp("(.*?)\.(docx|doc|pdf)$"); 
     if(!(regex.test(val))) { 
     $(this).val(''); 
     alert('Please select correct file format'); 
     } }); }); 
    </script> 
+0

ファイルの内容を検証する必要がある場合は、サーバー側で行う必要があります。 Ajaxを使用して「無効な場合は同じページに滞在する」要件を満たすことができます。ファイル名拡張子はコンテンツを保証しません。 – user2182349

答えて

1

使用onsubmitイベント:

<form method="POST" action="connection.php" enctype="multipart/form-data" onsubmit="return validate()"> 
<input type="text" id="name" name="bookname" placeholder="Book Name" required/> 
<textarea cols="25" rows="4" name="bookdesc" placeholder="Book Description" required></textarea> 
<input type="text" id="password" name="bookauthor" placeholder="Book Author"/ required> 
<input type="file" name="bookfile" id="bookfile" required/> 
<input type="submit" value="Upload book"> 
</form> 
<script> 
    function validate() { 
    var val = document.getElementById('bookfile').value.toLowerCase(); 
    var regex = new RegExp("(.*?)\.(docx|doc|pdf)$"); 
     if(!(regex.test(val))) { 
      document.getElementById('bookfile').value = ''; 
      alert('Please select correct file format'); 
      return false;  
     } 
     return true; 
    } 
</script> 
+0

あなたが提案したコードは動作していません。 –

+0

私は答えを更新しました:1)フォームには送信ボタンがありませんでした.2)JavaScriptコードがjQueryライブラリに依存していました。 –

+0

私はonsubmit = "return validate(this)"を使って同じことを達成できました。ありがとう:) –

0
<form method="POST" action="connection.php" enctype="multipart/form-data" id="myform"> 
<input type="text" id="name" name="bookname" placeholder="Book Name" required/> 
<textarea cols="25" rows="4" name="bookdesc" placeholder="Book Description" required></textarea> 
<input type="text" id="password" name="bookauthor" placeholder="Book Author"/ required> 
<input type="file" name="bookfile" id="bookfile" required/> 
</form> 
    <script> 
     var isValid = false; 
     $(document).ready(function() { 
     $('input[type=file]').change(function() { 
     var val = $(this).val().toLowerCase(); 
     var regex = new RegExp("(.*?)\.(docx|doc|pdf)$"); 
     isValid = !!(regex.test(val)); 
     if(!isValid) { 
     $(this).val(''); 
     alert('Please select correct file format'); 
     } }); }); 
     $("#myform").submit(function(e) { 
      if (!isValid) { 
       e.preventDefault(); 
      } 
     }); 
    </script> 

私はあなたのformidを追加しました。このidをセレクタとして使用して、formsubmitハンドラを作成しました。このハンドラはisValidfalseであるかどうかを確認し、そうであればを呼び出し、formの送信を防ぎます。 isValidtrueの場合、e.preventDefault()は呼び出されないため、formが送信されます。 isValidfalseで初期化され、input[type=file]changeで評価されます。

+0

私はこれを使用しているとき、私はjpegファイルをアップロードし、[Submit]をクリックするとエラーメッセージが表示されません。それは直接connection.phpに行きます –

+0

@AlapanあなたはフォームタグのIDを定義しましたか? –

+0

はい私は上記のmyformと同じでした –

関連する問題