两种不同的按钮,如何做事件代理?
本帖最后由 xq870723 于 2013-09-17 17:30:58 编辑
各位,中秋快乐。
有个问题困扰我多时,还请大家不吝赐教。
有两个按钮,一个是服务器控件btn1,一个是静态控件btn2(其实我也不知这个该叫啥,反正不在服务器端执行,具体叫啥还请各位指正)
<asp:Button ID="btn1" runat="server" Text="btn1" OnClick="Btn1_Click" OnClientClick="return Validate();" />
<input type="button" value="btn2" onclick="$('#<%= btn1.ClientID %>').click();" />
问题来了,当function Validate()返回的是false,点击btn1没反应,但是此时点击btn2时却提交了,会执行btn1的OnClick。这为啥嗯,如果btn1没有OnClick,那么点击两个按钮都会执行btn1的OnClientClick。也就是说,onclick="$('#<%= btn1.ClientID %>').click();" 这种事件代理的写法是可行的,可是返回false后却还执行了btn1的Onclick。
------解决方案--------------------看看最终生成的html代码
------解决方案--------------------使用$(('#<%= btn1.ClientID %>').trigger("click")试试
------解决方案--------------------如果你是说的这种情况你可以
<input type="button" value="btn2" onclick="if(Validate()) $('#<%= btn1.ClientID %>').click();" />
------解决方案--------------------嗯,又看了一下,我给看成是 submit 了。
如果你确定点击 bt2 时 Validate() 返回的也是false,那么真的就很奇怪了。你还是调试一下此时是否是 false 吧。
------解决方案--------------------1. 复制多一个服务器控件,只是改下ID,S端事件和C端事件和第一个一样;
2. return之前先判断。
------解决方案--------------------如果用的JQ
试试在script标签里注册click事件
或者
如果 Validate()是在 $(document).ready();内的 把它移到外面去看看
------解决方案--------------------
的确,这一招比第二种差,对用户来说,他体验不到差异,但多人登录时对服务器的影响就大些了,具体多大我也不知。