2017-08-08 9 views
1

に複数回実行するjQueryのアヤックスは、私が口を有効または無効にするマテリアライズCSSのボタンがあり、私はすべてのアウトレットのテーブルのリストを持っているスイッチトグル

@foreach($outlets as $outlet) 
<tr> 
    <td> 
     <div class="switch m-b-md" data-id="{{$outlet->id}}"> 
      <label> 
       @if($outlet->status == 'active') 
        <input id="agent-status" type="checkbox" checked=""> 
       @else 
        <input id="agent-status" type="checkbox"> 
       @endif 
       <span class="lever"></span> 
      </label> 
     </div> 
    </td> 
</tr> 
@endforeach 

私は.switchアヤックスをクリックしたときに問題があります私はそれがより5〜10倍

$(document).on("click", ".switch", function() { 

    var outlet_id = $(this).data('id'); 

    $(".switch").find("input[type=checkbox]").on("change",function() { 

     var status = $(this).prop('checked'); 

     if(status == true) { 
      status = "active"; 
     } else { 
      status = "inactive"; 
     } 

     $.ajax ({ 
      url: '/manager/outlets/'+outlet_id+'/status', 
      type: 'POST',    
      data: {"id": outlet_id, "status": status, "_token": '{{ csrf_token() }}'}, 
      success: function(data) 
      { 
       if(data.status==true) { 
        swal("Updated", "Status updated successfully", "success"); 
       } else if(data.status==false) { 
        swal("Failed", "Fail to update status try again", "error"); 
       } 
      }, 
      error: function(error) 
      { 
       swal("Failed", "Fail to update status try again", "error"); 
      } 
     }); 

    }); 

}); 

を実行しているスイッチをトグルし続ける場合は、複数回の実行では、あなたに感謝

+1

あなたのコードから:ユーザーが '二回、あなたは二つの等しいイベントがあるでしょう.switch'をクリックするので、もし毎回'あなたのコードを.switch'をユーザーがクリックすると、新しい 'change'イベントリスナーを追加しますメモリ内のリスナーとそれぞれ次のクリックは、あなたがこの – MysterX

+0

@MysterX感謝を追加します、私は本当に感謝し、あなたの時間をありがとうございました –

+0

が答え – MysterX

答えて

2

あなたは自分のイベントリスナーを分離し、両方のリスナーから、それへのアクセス権を持っているクロージャとしてoutlet_idを使用する必要があります。以下を参照してください:

var outlet_id; 

    $(document).on("click", ".switch", function() { 

     outlet_id = $(this).data('id'); 

    }); 

    $(".switch").find("input[type=checkbox]").on("change",function() { 

     var status = $(this).prop('checked'); 

     if(status == true) { 
      status = "active"; 
     } else { 
      status = "inactive"; 
     } 

     $.ajax ({ 
      url: '/manager/outlets/'+outlet_id+'/status', 
      type: 'POST', 
      data: {"id": outlet_id, "status": status, "_token": '{{ csrf_token() }}'}, 
      success: function(data) 
      { 
       if(data.status==true) { 
        swal("Updated", "Status updated successfully", "success"); 
       } else if(data.status==false) { 
        swal("Failed", "Fail to update status try again", "error"); 
       } 
      }, 
      error: function(error) 
      { 
       swal("Failed", "Fail to update status try again", "error"); 
      } 
     }); 

    }); 
+0

が機能することをあなたに感謝に感謝します –

1

あなたのループは、sの複数のdiv要素を作成しますAMEクラスswitch、あなたがクラスをクリックすると、switchクラスを持つすべてのdivがajaxポストのために呼び出します。そのため、あなたのループであなたのdivごとにidをしてください。

<div class="switch m-b-md" id="div_{{$outlet->id}}" onclick="callAjax('div_{{$outlet->id}}')"> 

あなたajax

function callAjax(divid){ 

    //do your ajax call here..... 

} 
+0

として追加処理する方法を教えてください可能性があり、新しい、新しいリスナーをあなたの応答のための –

1

それが起こっているスイッチがクリックされるたびに、リスナーが追加されているので、あなたがこのネストされたリスナーを持つべきではない、私はどうなるのか

すべての入力タイプのチェックボックスを変更するための代理関数を追加しています。私はこれらの入力に選択を簡単にするクラスを与えます。

$(".switch").on('change','.CheckBoxClass', function(){ 
var theid = $(this).parent('.switch').data('id'); 
var status = $(this).prop('checked'); 
//add the rest of your code 
}); 
+0

はあなたの時間をありがとうございました私は本当に –

関連する問題