2017-07-19 61 views
1

我正在使用javascript onclick方法顯示一個加載圖像onclick中的任何一項CheckBoxListCheckBoxList - onclick()JS函數如何檢測CheckBox外部的點擊(HTML輸入)

的CheckBoxList控制

<asp:CheckBoxList ID="ckBLBusinessUnits" onclick="loader(this.id);" runat="server" AutoPostBack="True" Visible="false" OnSelectedIndexChanged="ckBLBusinessUnits_SelectedIndexChanged"></asp:CheckBoxList>

我被迫使用JS onclick,而不是jQuery的事件綁定,作爲對照的是UpdatePanel內。初始加載後,jQuery函數不會觸發。如果我添加一個替代.ie來使用Sys.Application.add_load(loader);,那麼服務器端代碼將首先執行,然後執行JS函數。這對我的情況沒有幫助。

JS功能

function loader(controlID) { 
    if (controlID == "ckBLBusinessUnits") 
    { 
     if (($('#ckBLBusinessUnits :checkbox:checked').length) >= 5) 
     { 
      alert("Maximum 5 BUs can be selected."); 
      modal = document.getElementById('loadingImage'); 
      modal.style.display = "block"; 
     } 
    } 
    if (controlID == "selectSegment") { 
     modal = document.getElementById('loadingImage'); 
     modal.style.display = "block"; 
    } 
} 

現在,這裏的問題是,如果我點擊小的複選框,然後JS方法被觸發,這意味着加載圖像將顯示之外。在同一時刻,沒有回傳發生,因此圖像不能隱藏(在C#selectSegment_SelectedIndexChanged)。

如何處理複選框外的點擊?

enter image description here

渲染HTML

<table id="ckBLBusinessUnits" onclick="loader(this.id);"> 
    <tbody><tr> 
     <td><input id="ckBLBusinessUnits_0" type="checkbox" name="ckBLBusinessUnits$0" checked="checked" onclick="javascript:setTimeout('__doPostBack(\'ckBLBusinessUnits$0\',\'\')', 0)" value="BU 1"><label for="ckBLBusinessUnits_0">BU 1</label></td> 
    </tr><tr> 
     <td><input id="ckBLBusinessUnits_1" type="checkbox" name="ckBLBusinessUnits$1" onclick="javascript:setTimeout('__doPostBack(\'ckBLBusinessUnits$1\',\'\')', 0)" value="BU 2"><label for="ckBLBusinessUnits_1">BU 2</label></td> 
    </tr><tr> 
     <td><input id="ckBLBusinessUnits_2" type="checkbox" name="ckBLBusinessUnits$2" onclick="javascript:setTimeout('__doPostBack(\'ckBLBusinessUnits$2\',\'\')', 0)" value="BU 3"><label for="ckBLBusinessUnits_2">BU 3</label></td> 
    </tr><tr> 
     <td><input id="ckBLBusinessUnits_3" type="checkbox" name="ckBLBusinessUnits$3" onclick="javascript:setTimeout('__doPostBack(\'ckBLBusinessUnits$3\',\'\')', 0)" value="BU 4"><label for="ckBLBusinessUnits_3">BU 4</label></td> 
    </tr> 
</tbody></table> 
+0

要麼取消綁定你的jQuery點擊事件或重寫它。請發佈您複選框的呈現HTML。 –

+0

看到我的答案。您正在設置onclick整個表。 –

回答

0

您可以trigger JavaScript events to fire您阿賈克斯面板刷新後。

使用引用鏈接中的某個方法讓JQuery將事件綁定或解除綁定到刷新中的任何新元素。您還可以將其用作觸發器,以解除綁定導致圖像加載的事件或覆蓋該圖像,以便它調用一種方法觸發回發,如果這符合您的需要。

在您的代碼onclick事件是越來越對你的複選框父表中設置:

<table id="ckBLBusinessUnits" onclick="loader(this.id);"> 

這就是爲什麼當你點擊複選框外的事件被觸發。

+0

完全同意。現在,如果我使用觸發器,那麼事件也不會被觸發。由於.net控件位於updatepanel內部,並且發生部分回發。有什麼建議麼? – Ishan