是这样的,我这里页面写出来这是为了演示,实际的情况是Button1和Button2在不同的用户控件中,通过页面动态加载进来,所以你不要发表出在Button1_Click写Button2_Click(null,null);这样的回答
代码:
<asp:Button ID="Button1" runat="server" Text="Button1"
onclick="Button1_Click" /><asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button2" runat="server" Text="Button2"
onclick="Button2_Click" /><asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
$(function() {
$("#Button1").bind("click", function() {
document.getElementById("Button2").click();
});
});
protected void Button1_Click(object sender, EventArgs e)
{
TextBox1.Text = new Random().Next(10000).ToString();
}
protected void Button2_Click(object sender, EventArgs e)
{
TextBox2.Text = new Random().Next(10000).ToString();
}
就是单击Button1的时候,执行Button2的后台事件后,再执行Button1的后台事件
我现在是这样写的, 不同的浏览器运行效果还不一样呢
Firefox和Chrome执行了 Button2_Click
IE执行了Button1_Click
是什么原因呢,有没有办法在js中调用Button2的后台事件,执行Button2的后台事件,也执行Button1的后台事件
你可以监控下生成的HTML代码,看下具体的执行。
BUTTON1和BUTTON2都是RUNAT=SERVER的,所以,在执行它们的CLICK事件的时候,都会提交到服务器(POSTBACK)。
区别应该是两种浏览器的处理方式。
在FF中,执行BUTTON1的CLICK时,会先执行绑定的函数体,再执行.NET生成的代码,这样,BUTTON2“被”CLICK后POSTBACK,此时,原来的BUTTON1的CLICK事件就被忽略了(页面刷新了)
而到了IE中,这个执行相反,就得到了不同的结果。
以上是我的个人理解,分析下后台代码的执行顺序就能确认。
有办法解决Button1_Click,Button2_Click都执行吗
@999999999999999: 没办法!
你这个BUTTON的CLICK事件是要回调的,所以在客户端解决不了。
不过,你可以在服务器端做个调整:
private void Button1_Click(object sender, EventArgs e) { this.Button1_ClickProcess(); this.Button2_ClickProcess(); } private void Button2_Click(object sender, EventArgs e) { this.Button1_ClickProcess(); this.Button2_ClickProcess(); } private void Button1_ClickProcess() { //实现Button1原来的Click事件执行功能 } private void Button2_ClickProcess() { //实现Button2原来的Click事件执行功能 }
如果你两个按钮都是服务端控件的话,每个按钮的事件都会引起服务端的相应,引起页面的回传,这样的话,你用JS脚本出发单击事件的逻辑从根本上好像就行不通的吧,考虑下其他办法呢?
有什么方法呢
@999999999999999: 两个按钮均采用普通HTML控件,按钮触发指向一个AJAX请求,是否可行?
换个方式嘛
把用户控件里面button的click事件包装一个,让它可以在使用的页面注册。
怎么弄呢
具体怎没实现呢
好神奇的功能!旁观。。。。。。。。。。。!
世界之大,无所不有,无所不奇,业务场景千变万化
你没碰见的多了
@999999999999999:
“世界之大,无所不有,无所不奇,业务场景千变万化
你没碰见的多了” 又是一位见多识广的大虾!!久仰,久仰!
实在不行,建立一个静态类, 每次事件去引用这个静态类.