2011-10-18 10 views
0

$('#post-button').clickにバインドされた検証コード全体があります。考えられるのは、変数e_exittrueに設定されている場合、フォーム内のデータは一連のチェックを経るということです。 if文の条件を満たす場合は、メッセージに問題が表示され、e_exitfalseに設定されます。問題を除いて、フォームがまだ送信されているので(メッセージが表示されてから4分の1秒のように)、正しく実行されていません。if文で囲まれていてフォームが送信され、条件が満たされていませんか?

私はここにブール値を扱っていますので、型キャストは確かに問題になることはできませんが、私は本当に何が起こっているのか理解していない:

$('#post-button').click(function() { 
    var e_exit = true; 
    var notif_message = '<div class="notification red"><div class="cross"></div>'; 

    var name = $('input[name=name]').val(); 
    var url = $('input[name=url]').val(); 
    var urlrgx = /(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&amp;:/~\+#]*[\w\-\@?^=%&amp;/~\+#])?/i; 
    var urltst = urlrgx.test(url); 

    if(name == '' || name == 'Enter a name for this offer') { 
     $('#notification').html(notif_message + "You need to enter a name for this offer name. Try to pick something that you'll easily remember when seen again.</div>"); 
      e_exit = false; 
    } 

    if(!urltst) { 
     $('#notification').html(notif_message + "You need to enter a valid offer url prefixed with http:// for this offer.</div>"); 
      e_exit = false; 
    } 

    var rotation_select_val = parseInt($('select[name=r_id]').val()); 
    if(rotation_select_val != 0) { 
     var min_val = isNaN($('input[name=r_min]').val()); 
     var max_val = isNaN($('input[name=r_max]').val()); 

     if(min_val || max_val) { 
      $('#notification').html(notif_message + "You need to enter a numeric value for your rotation's min and max hits for this offer.</div>"); 
      e_exit = false; 
     } 
    } 

    var geo_select_val = $('select[name=g_country\\[1\\]]').val();   
    if(geo_select_val != 0) { 
     var geo_url_val = $('input[name=g_url\\[1\\]]').val(); 
     var geo_urltst = urlrgx.test(geo_url_val); 

     if(!geo_urltst) { 
      $('#notification').html(notif_message + "You need to enter a valid url prefixed with http:// for your geo-location targets.</div>"); 
      e_exit = false; 
     } 
    } 

    if(e_exit) { 
     $('form').submit(); 
    } 
}); 

これが起こってできた理由についてどのような答えを、または説明の編集は大きな助けになるでしょう!

答えて

0

#post-buttonが送信ボタンの場合は、falseを返してフォームの送信を停止する必要があります。

より良い解決策は、フォームのsubmitイベントにバインドするために、次のようになります。

$("#your-form").submit(function() { 
    // validate... 

    return e_exit; 
}); 

イベント・ハンドラからtrueを返す場合にのみ、フォームが提出することができます。

編集:

は、おそらくAjaxのプラグインはまた、ポストボタンのclickイベントをサブスクライブしていますか?その場合、私はfalseを返し、そうのようにさらに伝播するイベントを停止することを確認したい:

$("#post-button").click(function(ev) { 
    // validation 
    ev.stopPropagation(); 
    return false; 
}); 
+0

これは、ボタンを提出いないが、問題は、私は今、私をたい(それはすでにいくつかのajaxFormプラグインにバインドされていますですまだ使用していなかった)、すべてのものとajaxFormプラグインを再統合する時間がなかったので、 'e_exit'がfalseに設定されていてもまだそれが送信される理由を理解したいと思います。 – Avicinnian

+0

私の編集を参照してください。 –

+0

小道具、あなたの編集はポイントです:)。 – Avicinnian

関連する問題