1

以下のコードを使用して、いくつかのフォーム フィールドをチェックし、ボタン クリックでデータ テーブルをレンダリングしています。私の意図は、フィールドのいずれかが空の場合、テーブルがレンダリングされないようにすることです。どうやらreturn falseループ内が機能していないようです。

これは達成する正しい方法ですか?より良い方法はありますか?

$('#advance_search').click(function(){
  var ds = $('.advance_search .filter_field');

  $.each(ds, function(index, value){ //this loop checks for series of fields
    if ($(this).val().length === 0) {
      alert('Please fill in '+$(this).data('label'));
      return false;
    }
  });

  dt.fnDraw(); //shouldn't be called if either one of the field is empty

});
4

2 に答える 2

3

注意深く見ると、あなたreturn false$.eachコールバック関数の中にあるので、あなたがreturns falseいる「メイン関数」ではなく、その関数の呼び出し元のためです.

これを試して:

$('#advance_search').click(function(){
    var ds = $('.advance_search .filter_field'), valid = true;

    $.each(ds, function(index, value){ //this loop checks for series of fields
        if($(this).val().length === 0) {
            alert('Please fill in '+$(this).data('label'));
            return (valid = false); //return false and also assign false to valid
        }
    });

    if( !valid ) return false;

    dt.fnDraw(); //shouldn't be called if either one of the field is empty

});
于 2012-06-24T14:15:48.733 に答える
0

dt.fnDraw()が呼び出されないように制御変数を追加できます。

$('#advance_search').click(function(e){

  e.preventDefault();

  var check = 0, // Control variable
      ds    = $('.advance_search .filter_field');

  $.each(ds, function(index, value){ //this loop checks for series of fields
    if($(this).val().length === 0) {
      check++; // error found, increment control variable
      alert('Please fill in '+$(this).data('label'));
    }
  });

  if (check==0) { // Enter only if the control variable is still 0
    dt.fnDraw(); //shouldn't be called if either one of the field is empty
  }

});
于 2012-06-24T14:14:51.317 に答える