关于用onclientclick事件改变元素value的值

老鸦 2015-12-18 10:47:27
我用的是asp.net的button控件,onclick事件是在onclientclick事件之后执行,执行的过程中会刷新页面,我在onclientclick事件中通过Js语句改变input控件的value,但始终得不到我要的值,而当我在onclientclick后面加return false时又可以得到改变后的值。
实在不知道是为什么,难道在onclientclick中所做的所有改变在onclick事件后全部都还原了?
那有没有什么办法能够把一个js事件和button的onclick事件绑定到一起?实在是被难倒了,求助啊。
...全文
186 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
如果是可以修改value的值,那么你js修改了,服务端会收到新修改的值,如果是不可修改,那么服务端会从ViewState中恢复数据,这时候你怎么修改都是没用的
lovebaby 2015-12-18
  • 打赏
  • 举报
回复
如果你是服务器端的BUTTTON,哦弄onclick是服务器端事件,换言之onclick会SUBMIT,而onclientclick是附加在服务器端BUTTON上的客户端事件。你可以在客户端sumbit事件中试试。
正怒月神 版主 2015-12-18
  • 打赏
  • 举报
回复
用ajax调用后台方法。
老鸦 2015-12-18
  • 打赏
  • 举报
回复
引用 5 楼 xomix 的回复:
[quote=引用 4 楼 u014753606 的回复:] 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() 事件中处理。 你现在的处理方法是在前端点击按钮的时候处理,这样按钮点击后就完成了处理,然后提交后台,处理数据后重载页面,你的处理当然就被重载覆盖了。[/quote] 感谢你的帮助!我的问题解决了,在input元素里加上runat="server",这样在刷新后js改变的value值也不会被覆盖,值得注意的是控件的id需要用<%=id.ClientID%>来代替,感谢各位~~
sy401042879 2015-12-18
  • 打赏
  • 举报
回复
代码问题,应该是在你点button之后, 页面初始化、或者你button代码里面又重新赋了值。
  • 打赏
  • 举报
回复
引用 4 楼 u014753606 的回复:
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() 事件中处理。 你现在的处理方法是在前端点击按钮的时候处理,这样按钮点击后就完成了处理,然后提交后台,处理数据后重载页面,你的处理当然就被重载覆盖了。
老鸦 2015-12-18
  • 打赏
  • 举报
回复
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”。

62,025

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧