首页 新闻 搜索 专区 学院

button执行执行另一个button后台事件,并执行自己的后台事件

0
悬赏园豆:5 [已解决问题] 解决于 2012-07-08 17:50

是这样的,我这里页面写出来这是为了演示,实际的情况是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的后台事件

999999999999999的主页 999999999999999 | 初学一级 | 园豆:6
提问于:2012-07-01 18:06
< >
分享
最佳答案
0

你可以监控下生成的HTML代码,看下具体的执行。

 

BUTTON1和BUTTON2都是RUNAT=SERVER的,所以,在执行它们的CLICK事件的时候,都会提交到服务器(POSTBACK)。

区别应该是两种浏览器的处理方式。

在FF中,执行BUTTON1的CLICK时,会先执行绑定的函数体,再执行.NET生成的代码,这样,BUTTON2“被”CLICK后POSTBACK,此时,原来的BUTTON1的CLICK事件就被忽略了(页面刷新了)

而到了IE中,这个执行相反,就得到了不同的结果。

 

以上是我的个人理解,分析下后台代码的执行顺序就能确认。

收获园豆:3
无之无 | 大侠五级 |园豆:5085 | 2012-07-01 20:08

有办法解决Button1_Click,Button2_Click都执行吗

999999999999999 | 园豆:6 (初学一级) | 2012-07-01 20:54

@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事件执行功能
}
无之无 | 园豆:5085 (大侠五级) | 2012-07-02 08:23
其他回答(4)
0

如果你两个按钮都是服务端控件的话,每个按钮的事件都会引起服务端的相应,引起页面的回传,这样的话,你用JS脚本出发单击事件的逻辑从根本上好像就行不通的吧,考虑下其他办法呢?

收获园豆:1
八戒的师傅 | 园豆:1472 (小虾三级) | 2012-07-01 18:51

有什么方法呢

支持(0) 反对(0) 999999999999999 | 园豆:6 (初学一级) | 2012-07-01 19:00

@999999999999999: 两个按钮均采用普通HTML控件,按钮触发指向一个AJAX请求,是否可行?

换个方式嘛

支持(0) 反对(0) 八戒的师傅 | 园豆:1472 (小虾三级) | 2012-07-02 22:37
0

把用户控件里面button的click事件包装一个,让它可以在使用的页面注册。

收获园豆:1
forhells | 园豆:522 (小虾三级) | 2012-07-01 20:04

怎么弄呢

支持(0) 反对(0) 999999999999999 | 园豆:6 (初学一级) | 2012-07-01 20:54

具体怎没实现呢

支持(0) 反对(0) 999999999999999 | 园豆:6 (初学一级) | 2012-07-01 21:22
0

好神奇的功能!旁观。。。。。。。。。。。!

Angkor--:-- | 园豆:1086 (小虾三级) | 2012-07-02 00:28

世界之大,无所不有,无所不奇,业务场景千变万化

你没碰见的多了

支持(0) 反对(0) 999999999999999 | 园豆:6 (初学一级) | 2012-07-02 01:18

@999999999999999: 

“世界之大,无所不有,无所不奇,业务场景千变万化

你没碰见的多了” 又是一位见多识广的大虾!!久仰,久仰!

支持(0) 反对(0) Angkor--:-- | 园豆:1086 (小虾三级) | 2012-07-02 08:54
0

实在不行,建立一个静态类, 每次事件去引用这个静态类.

zhengyingcan | 园豆:12 (初学一级) | 2012-07-02 16:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册