2017-03-22 6 views
1

私は単純な検証を行う関数を持っています。すべての入力テキストがempytならば警告がポップアップし、プログラムは停止します。ボタンをクリックすると機能が起動します。私はすでにイベントを渡していますが、どういうわけかevent.PreventDefault()は動作していないので、サーバーサイドのコードにアクセスしています。 以下に簡単な検証を行う機能を示します。トリガの events.prevendefault()はeach()関数を持つ関数の中で動作しません

var checkRequired = function(event)   
    $('.box-load .requir').each(function(index,item) { 
    var index = $(item).data('index'); 
    if(index === 'text') { 
     if ($(item).val() == "") { 
     $(this).focus(); 
     alert('Please input the required parameter'); 
     event.preventDefault(); 
     } 
    } 
    }); 
} 

私はこのコードを使用して機能

:checkRequired()ベロー

$(document).on('click','.box-load .btn-save', function(event) { 
event.preventDefault(); 
checkRequired(event); 

は、私は、Ajaxリクエストを行うつもりです。私が欲しいのは、入力テキストの1つが空の場合、イベントは停止です。しかし、そのコードでは、動作していません。なにか提案を?

ありがとうございます。

+0

booleanを返すように 'checkRequired()'を変更し、クリックハンドラのテストで戻り値を返し、Ajaxが動作すればそれを行います。あなたのクリックハンドラで既に 'event.preventDefault()'を呼び出していて、 '.preventDefault()'も何もしていないので、 'checkRequired()'の中に 'event.preventDefault()'を入れても意味がありませんAjaxコードを停止すると、クリックされたボタンのデフォルト(非JS)の振る舞いだけが阻止されます。 – nnnnnn

+0

はボタンのようなもので、送信ボタンのようなものです。したがって、最初の 'event.preventDefault'はうまくいくはずです。フォーム提出のためにサーバーサイドコードが実行されているかどうかを知る上で、何か不思議なことがありますか? –

答えて

0

event.preventDefault()に電話すると、イベントの既定の操作は実行されません。

$(document).on('click','.box-load .btn-save', function(event) 
{  
    checkRequired(event); 
    event.preventDefault(); 

event.preventDefault()はforループの外側にある必要があります。

var checkRequired = function(event)  
{  
     $('.box-load .requir').each(function(index,item) { 
     var index = $(item).data('index'); 
     if(index === 'text') { 
      if ($(item).val() == "") { 
      $(this).focus(); 
      alert('Please input the required parameter'); 
      } 
     } 
     }); 
event.preventDefault(); 
} 
+0

@nnnnnn提案していただきありがとうございます。ありがとう、 –

+0

私はそれがあなたを助けることを聞いてうれしいです。それがあなたを助けるなら、答えとして受け入れることができます。 –

0

event.preventDefault()は、関数呼び出しを停止するのではなく、デフォルトのアクションを停止します。あなたの関数から具体的にreturnがなければ、それは進んで、ajaxを起動します。

関連する問題