2017-07-19 34 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