[已解决问题] 一个from中有多个submit的回发问题。
提问时间: 2007-12-05 16:39
悬赏分:30 浏览:998 次
各位大侠们,问题壁虎又来提问了。

先把产生问题的过程说下:
今天想用JS在客户端执行一个按钮的onclick()事件,来引起一个回发去执行一个Button的服务器端事件。
调用 btn.onclick();
但提示 无对象。然后一检查,才发现onclick()事件为null。
查看html 发现按钮如下:
<input type="submit" name="btnNext" value="下一步" id="btnNext" class="button_normal"/>
用的是type="submit" 也就是提交来实现的点击回发。没有onclick事件。而且一个from内有多个type="submit"的按钮。

于是问题就来了:
如代码所示:
<body>
    <form name="form1" method="post" action="WebForm1.aspx" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTQ3NjkyOTcyMmRkUcQ+2fGohGzyIbKrTz5Vh/t2CAg=" />
</div>

    <div>
        <input type="submit" name="Button1" value="Button" id="Button1" />
        <input type="submit" name="Button2" value="Button" id="Button2" /></div>
   
<div>

    <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWAwLLhbb8BgKM54rGBgK7q7GGCKnsv6niZyFRhWMec9EHCuSmBjg/" />
</div></form>
</body>
一个from中有多个submit。
那么提交后,
1、服务器端是怎么判断哪个submit发出的回发呢?
2、在js中,如果要去触发Button1的回发,然后使服务器端也能执行相应的onclick事件。应该怎么做?
3、2个隐藏控件。__VIEWSTATE存的是ViewState,我知道。但是第二个__EVENTVALIDATION又存的是什么?用ViewStateDecoder2工具看出来的就是3个数字,不知道什么意思。

希望哪位大侠能帮忙回答一下。或者有什么相应的资料或文章也请不吝提供。


提问者:壁虎 - 初学一级

问题补充:首先声明我没有攻击别人网站的想法。之所以只贴了客户端代码,那是因为问的问题与服务端无关,其实服务器端什么都没写,只是在页面上托了2个Button。

Klesh Wong的解答了我的第1个问题。在此表示感谢。

当submit类型的input元素被点击时,browser会把该input的name和value作为字段post到服务器,那么服务器端就可以根据这个字段来判断是哪个button被click了。

但是 submit类型的input元素 是没有onclick事件的(当然你可以添加客户端的onclick,但是在本问题中没有。)所以不能用 js调用onclick方法。

希望有高人能帮忙回答2,3。


最佳答案
应该调用click()触发button的click事件,onclick是用来定义button被click时应该执行的操作。

当submit类型的input元素被点击时,browser会把该input的name和value作为字段post到服务器,那么服务器端就可以根据这个字段来判断是哪个button被click了。
2007/12/5 21:57:26 回答者:Klesh Wong


提问者对于答案的评价: 啧,可能我表达得不够清楚吧, " 应该调用click()触发button的click事件,onclick是用来定义button被click时应该执行的操作。" 这个纯粹是从客户端的角度来讲 click和onclick是两个概念,前者是用来模拟鼠标点击按钮的效果,后者是用来定义当按钮被点击时要执行的操作。 如果你要触发按钮来引发回传的话,应该是要调用click方法才对 而相反的,如果你想在按钮被点击的时候执行一些客户端操作的时候,才去定义onclick事件。 对于2,就是调用相应的submit按钮的click方法。 ----------------------------------------------------- 是这样的啊。谢谢你帮我解决了我前面2个问题。 第3个问题我再单独提一个问题。
其它回答(3)
难道楼主在研究如何攻击别人的网站?为什么只有编译后的页面代码?编译前的呢?
7个月前   回答者:麒麟.NET - 菜鸟二级
呵呵。。麒麟说的精辟!!
7个月前   回答者:彭成刚 - 初学一级
呵呵,就是呀楼主!
如果楼主不是网友麒麟.NET所说的在攻击他人网站,而是自己开发的程序,那么,我想问楼主,既然你要让服务器处理事件,为何还用标记控件呢,怎么不用.Net提供的服务器端的控件,服务器端控件不需要你考虑那么多细节问题,你的问题就能被解决。楼主是从Java转型到.Net上的吗,还沿用Java的做法?
7个月前   回答者:刚刚 - 老鸟四级
评论
7个月前   Klesh Wong :
啧,可能我表达得不够清楚吧,
" 应该调用click()触发button的click事件,onclick是用来定义button被click时应该执行的操作。" 
这个纯粹是从客户端的角度来讲
click和onclick是两个概念,前者是用来模拟鼠标点击按钮的效果,后者是用来定义当按钮被点击时要执行的操作。
如果你要触发按钮来引发回传的话,应该是要调用click方法才对
而相反的,如果你想在按钮被点击的时候执行一些客户端操作的时候,才去定义onclick事件。

对于2,就是调用相应的submit按钮的click方法。


6个月前   刚刚 :
楼主对最佳答案的评论比最佳答案还要长,呵呵佩服呀!
   您需要登录以后才能回答!
我的问题    我要提问


快到期问题

> 问题排行榜

有不合适内容,建议去除