用的是asp.net的button控件,onclick事件是在onclientclick事件之后执行,执行的过程中会刷新页面,我在onclientclick事件中通过Js语句改变input控件的value,但始终得不到我要的值,而当我在onclientclick后面加return false时又可以得到改变后的值。
实在不知道是为什么,难道在onclientclick中所做的所有改变在onclick事件后全部都还原了?
那有没有什么办法能够把一个js事件和button的onclick事件绑定到一起?实在是被难倒了
用ajax调用后台方法。
function grid1() {
var elem = document.getElementById("hidden");
elem.value = "x";
alert(document.getElementById("hidden").value);
}
alert(document.getElementById("hidden").value);
原来input的value是a,在clientonclick里面调用grid1()函数,点击button,提示框里会出现“x”,但是紧接着进入onclick事件,页面刷新后提示框里还是出现“a”。
这是明显的把前端事件和后台事件搞混的例子
前端事件一般就是js事件,这些事件不经过服务器调用,只在用户浏览器中执行,当然ajax有着前端事件和后台事件的结合效果。
后台事件实际上是在你激发事件后把整个前端重新提交,提交后后台按照需求处理完成后再把整个页面重新按照你后台的处理结果重新respons到用户浏览器,也就是等于重新载入一次整个页。
因此你要是想要在后台点击后处理前端的dom元素,有多种做法。
第一种就是dom元素加上 ruant=server 属性,然后直接在后台点击按钮事件里面处理。
第二种是在按钮点击事件里面加上respone.write("<script></script>") 在最后,在事件完成后处理。
第三种也可以在前端的 document.ready() 事件中处理。
你现在的处理方法是在前端点击按钮的时候处理,这样按钮点击后就完成了处理,然后提交后台,处理数据后重载页面,你的处理当然就被重载覆盖了。
问题解决了,在input元素里加上runat="server",这样在刷新后js改变的value值也不会被覆盖,值得注意的是控件的id需要用<%=id.ClientID%>来代替