2017-10-23 6 views
1

私の要件は、チェックボックスの変更イベントで他のすべてのチェックボックスのチェックを外すことです。 しかし、結果は無限ループになります。'Checkbox change'は無限ループになります

$(".chk").change(function(event) { 
    var $this = $(this); 
    var id = $this.attr('id'); 
    var chkOtherCheckboxes = 'on'; 
    if ($this.is(':checked')) { 
    chkOtherCheckboxes = 'off'; 
    } 
    $('input:checkbox:not("#' + id + '")').bootstrapToggle(chkOtherCheckboxes); 
}); 
+1

これは 'change'関数を再度呼び出す関数で_Toggled_を取得するためです。それは再帰のようなものです。 –

+0

@NikhilWagh再帰は停止条件を持つ必要があるため、再帰ではありません – DarkBee

+0

すべての関連コードを共有してください –

答えて

1

bootstrapToggleを無効にして、入力を変更してもう一度有効にします。

$(".chk").change(function(event) { 
    var id = this.id; 
    var status = !this.checked; 
    $('input:checkbox:not("#' + id + '")').each(function(){ 
    $(this).bootstrapToggle('destroy'); 
    $(this).prop('checked', status); 
    $(this).bootstrapToggle(); 
    }); 
}); 
+0

prop( 'checked')はここでは機能しません。 bootstrapToggleは私がスイッチを動作させる唯一のものです。 – Devi

+0

@Devi 'bootstrapToggle( 'disable')'を実行して有効にするとどうですか? – RRK

+0

'bootstrapToggle( 'disable')'を使うとチェックボックスが無効になります – Devi

0

ユーザーがチェックボックスをオンにしたときに同じチェックボックスをもう一度変更しています(.chk)。

User click checkbox --> triggers change function --> 
--> changes status of checkboxes(including itself) --> 
--> again triggers change function 

//無限ループ

あなたは現在のチェックボックスのための変化を誘発しないことを確認してください。

私が助けてくれたら教えてください。

+0

提案をありがとう。しかし、私の要件は - すべてのチェックボックスをチェックすると、他のすべてのチェックボックスをオフにする必要があります。 – Devi

+0

私はあなたの要件を持っています。もう一度同じチェックボックスでイベントをトリガーしていることを知らせていましたが、これは正しい方法ではありません:)。 上記の回答はあなたの問題を解決するかもしれませんが、これを解決する最善の方法はありません。 –

関連する問題