2013-12-13 43 views
0

所以我有一箇中繼器,包含:JavaScript的一箇中繼器中

<table> 
<tr> 
    <td> 
     <div class="divStyle"> 
      <asp:CheckBox ID="cbSelection" runat="server" AutoPostBack="true"/> 
     </div> 
     <div class="divStyle">      
      <asp:Literal ID="ltlName" runat="server"></asp:Literal> 
     </div> 
     <div style="float:left; width:110px; margin-right:13px;"> 
      <asp:DropDownList ID="ddlMode" runat="server"></asp:DropDownList> 
     </div> 
     <div style="float:left; width:110px;"> 
      <asp:DropDownList ID="ddlQuantity" runat="server" 
      onChange="javascript:CheckPostBack();"></asp:DropDownList> 
     </div> 
    </td> 
</tr> 

我想要做的是:每個drodDown項目改變時 ,我檢查複選框被檢查,如果是這樣,我在後面的代碼中執行一個方法。

,所以我創建了下面的JavaScript:

<script> 
function CheckPostBack() { 
    var checkElt = document.getElementById(GetCheckBoxClientID()); 
    if (checkElt != null) { 
     alert($(checkElt).prop('checked')); 
     if ($(checkElt).prop('checked')) { 
      var hdnBtn = document.getElementById(GetHiddenBtnClientID()); 
      hdnBtn.click(); 
     } 
    } 
} 

hdnBtn是我用火回傳, GetCheckBoxClientID和GetHiddenBtnClientID是對碼方式按鈕後面注入的onPageLoad這樣我就可以得到複選框和HiddenButton的相應ID。

問題在於這種方法不起作用,因爲所有項目的方法都是相同的,所以每個測試都是從中繼器的第一個項目中爲checkBox完成的。

回答

0

所以,我需要一點點找到一個解決方案(實際上醜陋的一個) 我添加一個id到div包含checkbox,然後使用DOM並導航到同一行中的CheckBox

<script type="text/javascript"> 
function CheckPostBack(sourceElt) { 
    var DivCollection = sourceElt.parentNode.parentNode.getElementsByTagName("div"); 

    for (var i = 0; i < DivCollection.length; i++) { 
     var oCurDiv = DivCollection[i]; 

     if (oCurDiv.id.indexOf('lnkContainer') >= 0) { 
      var checkElt = (oCurDiv.firstElementChild || oCurDiv.firstChild) 

      if (checkElt != null) { 
       alert($(checkElt).prop('checked')); 

       if ($(checkElt).prop('checked')) { 
        var hdnBtn = document.getElementById(GetHiddenBtnClientID()); 
        hdnBtn.click(); 
       } 
      } 
     } 
    }  
} 

其實我使用了此鏈接上找到了答案: How to access a Div inside a repeater using javascript

相關問題