2015-12-21 111 views
0

我一直在從JavaScript獲取此錯誤。每次我選擇/取消選擇ckhDirectDebit複選框都會發生。未捕獲RangeError:在Chrome中超出最大調用堆棧大小

下面是代碼:

<script type="text/javascript"> 
    $(document).ready(function() { 
     var isDirectDebitSelected = $('#<%=chkDirectDebit.ClientID%>'); 
     var sameAsMerchantBankCheckbox = $('#<%=chkSameAsMerchantBank.ClientID%>'); 
     var sameAsMerchantBankLabel = $('#<%=txtSameAsMerchantBank.ClientID%>'); 

     function setSameAsMerchantVisible() { 
      if (isDirectDebitSelected.is(':checked')) { 
       sameAsMerchantBankCheckbox.show(); 
       sameAsMerchantBankLabel.show(); 
      } else { 
       sameAsMerchantBankCheckbox.hide(); 
       sameAsMerchantBankLabel.hide(); 
      } 

      isDirectDebitSelected.bind('change', function() { 
       setSameAsMerchantVisible(); 
      }); 

      setSameAsMerchantVisible(); 
     } 
    }); 
</script> 

<asp:CheckBox runat="server" ID="chkDirectDebit" /> 
<asp:Label runat="server" AssociatedControlID="chkSameAsMerchantBank" ID="txtDirectDebit" meta:resourcekey="lblDirectDebit"></asp:Label> 
<asp:CheckBox runat="server" ID="chkSameAsMerchantBank" OnCheckedChanged="chkSameAsMerchantBank_CheckedChanged" AutoPostBack="True" Checked="True" /> 
<asp:Label runat="server" AssociatedControlID="txtSameAsMerchantBank" ID="txtSameAsMerchantBank" meta:resourcekey="lblSameAsMerchantBank"></asp:Label> 

任何人都知道我在JS做什麼錯?導致這種異常的潛在問題是什麼?

+4

'setSameAsMerchantVisible'總是叫你得到無限遞歸調用 – Grundy

+3

'setSameAsMerchantVisible()''從setSameAsMerchantVisible',你有什麼期待? ? –

+0

@ A.Wolff我試圖檢查chkDirectDebit是否被檢查。如果它比我需要調用setSameAsMerchantVisible方法,那需要顯示chkSameAsMerchantBank複選框。 –

回答

3

您有無限遞歸,因爲setSameAsMerchantVisible裏面沒有任何條件再次調用setSameAsMerchantVisible
好像你有一個錯字,應該靠攏架高一點

function setSameAsMerchantVisible() { 
    if (isDirectDebitSelected.is(':checked')) { 
     sameAsMerchantBankCheckbox.show(); 
     sameAsMerchantBankLabel.show(); 
    } else { 
     sameAsMerchantBankCheckbox.hide(); 
     sameAsMerchantBankLabel.hide(); 
    } 
} // <-- to here 
    isDirectDebitSelected.bind('change', function() { 
     setSameAsMerchantVisible(); 
    }); 

    setSameAsMerchantVisible(); 

//} from here 
+0

謝謝!這是問題:) –

1

這種情況下,當程序落在一個無限循環可能發生..

你遞歸調用setSameAsMerchantVisible()

1

發生這種情況,因爲你的代碼是一個無限循環,由於遞歸調用下面去功能 -

function setSameAsMerchantVisible() { 

// other code 
      setSameAsMerchantVisible(); 
     } 

堆棧由於遞歸調用而溢出。

+0

而且他也將它稱爲嵌套變化事件,只是在每次更改時重新綁定和重新綁定更改事件$ –

相關問題