OnClientClick 事件失效问题.
这个是我的aspx页面的button代码:<asp:ButtonID="IbtnSave"runat="server"Text="保存"CssClass="buttonC...
这个是我的aspx页面的button代码 :
<asp:Button ID="IbtnSave" runat="server" Text="保存" CssClass="buttonCss" OnClientClick=" return true;" OnClick="IbtnSave_Click1" UseSubmitBehavior="false"/>
我在OnClientClick事件中直接写的返回true,居然服务端的事件OnClick里面也不执行了。
有没有人遇到这个问题帮帮解决下,我也查了很多地方了,都没有好的解决方法。
开发平台是vs2008 framwork2.0,IIS是6.0,服务器2003 server系统,浏览器主要是IE。
当然实际使用的时候我肯定要有个返回函数,我是先前在返回函数里面返回后发现效果不对,我怀疑是函数问题,所以就直接写了一个return true;结果就让我郁闷了,按理说应该是返回false才不执行 OnClick。现在不管返回什么都不执行,我怀疑是微软的OnClientClick这个处理机制有bug。 展开
<asp:Button ID="IbtnSave" runat="server" Text="保存" CssClass="buttonCss" OnClientClick=" return true;" OnClick="IbtnSave_Click1" UseSubmitBehavior="false"/>
我在OnClientClick事件中直接写的返回true,居然服务端的事件OnClick里面也不执行了。
有没有人遇到这个问题帮帮解决下,我也查了很多地方了,都没有好的解决方法。
开发平台是vs2008 framwork2.0,IIS是6.0,服务器2003 server系统,浏览器主要是IE。
当然实际使用的时候我肯定要有个返回函数,我是先前在返回函数里面返回后发现效果不对,我怀疑是函数问题,所以就直接写了一个return true;结果就让我郁闷了,按理说应该是返回false才不执行 OnClick。现在不管返回什么都不执行,我怀疑是微软的OnClientClick这个处理机制有bug。 展开
4个回答
展开全部
对于 Server 端的Button,UseSubmitBehavior 非常特殊,我们看一下MSDN对这个属性的描述:
使用 UseSubmitBehavior 属性来指定 Button 控件 使用 客户端浏览器的提交机制 还是 ASP.NET 回发机制。默认情况下,此属性的值为 true,从而导致 Button 控件使用浏览器的提交机制。如果指定为 false,则 ASP.NET 页框架将客户端脚本添加到页面,以将窗体发送到服务器。
如你所描述的:
你设置 UseSubmitBehavior = False,则该 Button 需要采用ASP.NET 回发机制来触发server端的事件,所谓的回发机制,实际就是.NET自动给页面添加了相应的JS代码,并且给这个BUTTON自动添加了客户端的onclick事件。此时,你去看页面输出的HTML源码,会看到下面的类似内容:
<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['ctl01'];
if (!theForm) {
theForm = document.ctl01;
}
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
//]]>
</script>
而这个Button的输出的HTML代码类似下面的:
<input type="button" name="ctl00$MainContent$Button1" value="Button" onclick="__doPostBack('ctl00$MainContent$Button1','')"
而你又指定了这个Button的onclientclick事件为 return true,那么.NET页面在自动为BUTTON赋予客户端事件时,会自动判断,并且将这些事件合并到一起执行。此时这个BUTTON的HTML输出变成了下面的样子
<input type="button" name="ctl00$MainContent$Button1" value="Button" onclick="return true;__doPostBack('ctl00$MainContent$Button1','')"
你会看到,在__doPostBack 前面,是你自己指定的 return true; 而在JS代码里,return 之后的任何内容都不执行,所以,后面的 __doPostBack 被忽略了,也就是你说的不会触发Server端的事件了。
解决的方法其实很简单:
第一种,给 onclientclick 指定一个函数,而不是简单的 return true;
第二种,将 button 的onclientclick要做的事,放到 form 的 onsubmit 里去做
使用 UseSubmitBehavior 属性来指定 Button 控件 使用 客户端浏览器的提交机制 还是 ASP.NET 回发机制。默认情况下,此属性的值为 true,从而导致 Button 控件使用浏览器的提交机制。如果指定为 false,则 ASP.NET 页框架将客户端脚本添加到页面,以将窗体发送到服务器。
如你所描述的:
你设置 UseSubmitBehavior = False,则该 Button 需要采用ASP.NET 回发机制来触发server端的事件,所谓的回发机制,实际就是.NET自动给页面添加了相应的JS代码,并且给这个BUTTON自动添加了客户端的onclick事件。此时,你去看页面输出的HTML源码,会看到下面的类似内容:
<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['ctl01'];
if (!theForm) {
theForm = document.ctl01;
}
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
//]]>
</script>
而这个Button的输出的HTML代码类似下面的:
<input type="button" name="ctl00$MainContent$Button1" value="Button" onclick="__doPostBack('ctl00$MainContent$Button1','')"
而你又指定了这个Button的onclientclick事件为 return true,那么.NET页面在自动为BUTTON赋予客户端事件时,会自动判断,并且将这些事件合并到一起执行。此时这个BUTTON的HTML输出变成了下面的样子
<input type="button" name="ctl00$MainContent$Button1" value="Button" onclick="return true;__doPostBack('ctl00$MainContent$Button1','')"
你会看到,在__doPostBack 前面,是你自己指定的 return true; 而在JS代码里,return 之后的任何内容都不执行,所以,后面的 __doPostBack 被忽略了,也就是你说的不会触发Server端的事件了。
解决的方法其实很简单:
第一种,给 onclientclick 指定一个函数,而不是简单的 return true;
第二种,将 button 的onclientclick要做的事,放到 form 的 onsubmit 里去做
展开全部
你每次都return true 你就把这个事件去掉 效果不是一样么?难道你要在onclientclick事件中做什么处理么?
我建议 你把这个button页面代码删除了 再重新拖一个button 再添加一次事件 看看 这个问题我也遇到过
我建议 你把这个button页面代码删除了 再重新拖一个button 再添加一次事件 看看 这个问题我也遇到过
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
请将UseSubmitBehavior="false"改成true 或者去掉 不然不会验证后台代码的 你可以百度一下这个UseSubmitBehavior这个属性的用法
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
把 return true 改成 event.returnValue = true;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
您可能需要的服务
百度律临官方认证律师咨询
平均3分钟响应
|
问题解决率99%
|
24小时在线
立即免费咨询律师
12626人正在获得一对一解答
郑州都市传说6分钟前提交了问题
哈尔滨冰雪奇缘1分钟前提交了问题
昆明彩云之南5分钟前提交了问题