SharePoint <button> 元素会不希望地重新加载页面

4
我在我的SharePoint站点上有一个aspx页面,其中我已经包含了标签。但奇怪的是,页面上的每个按钮在被点击时都会重新加载页面。即使没有属性(如id、class等)或功能的按钮也会在被点击时重新加载页面。我该如何解决这个问题?我甚至无法在调试器中看到发生了什么,因为我没有调用任何重新加载函数,所以我不知道在哪里放置断点。
非常感谢您的帮助,我真的很感激。

你是怎么把按钮放在页面上的?它们有 runat="server" 属性吗?或者它们是 <asp:Button> 按钮吗? - naivists
按钮本身只是<button>点击我</button>(我从我的代码中删除了所有有趣的内容,以确保这不是问题的原因。但是,我的按钮位于<asp:Content runat =“server” ContentPlaceHolderID =“PlaceHolderMain”> </ asp:Content>标签之间。) - user1226409
2个回答

15

这里的问题出在 <button> 标签上。它的默认行为是作为提交按钮,除非另有声明并会导致重新加载。

为了保留 <button> 标签,请将 type='button' 添加到按钮元素中。我认为这可以防止重新加载。

或者您可以使用老式的带有 type='button' 的 <input> 标签。这也可以防止重新加载。

或者其他带有 onclick 事件的 html 元素也可以起作用。


如果这解决了您的问题,请将我的回复标记为答案。 - Josey
嗨@Josey,不幸的是我不是写这个回答的人,也没有足够的权限去这样做。 - Francesco Mantovani
@Josey 当按下“Enter”键触发onMouseDown事件时,<input type="input">标签也会出现相同的问题。有解决方法吗? - nikhil kekan

0

首先搜索名为doPostBack的函数,并在入口点上设置断点,然后单击按钮。如果您触发了此断点,则可能意味着自动提交已打开,用于生成按钮的控件。但是,如果您触发了该断点,则应该能够查看堆栈跟踪以确定如何到达那里。

如果这样做不起作用,请使用浏览器中的F12工具,从HTML部分开始搜索(Ctrl-F)单词“click”。然后转到脚本选项卡,并对每个JavaScript文件执行相同操作。如果所有按钮都表现出相同的行为,则很可能已注册单击事件。可能使用jQuery进行注册,例如$('button'),以便匹配页面上的所有按钮并注册单击处理程序。

如果仍然找不到问题所在,并且您可以访问http://startermasterpages.codeplex.com/中的一个主页,请下载其中一个主页,并暂时将其替换为您的主页。首先在页面上拍摄正在加载的脚本的屏幕截图。然后逐个添加到起始主页中,直到出现不需要的行为。然后在该脚本的每个函数入口点上设置断点,然后单击按钮并查看您所在的位置。


谢谢您的建议,非常有帮助。我不知道从哪里开始,但至少这让我朝着正确的方向前进了一步。不幸的是,在尝试了最后一个建议(逐个查看JavaScript文件以找到问题的根源)之后,似乎问题可能来自SharePoint代码中的某些怪异之处。仍在努力弄清楚是什么原因导致了这个问题。 - user1226409
我使用了Google Chrome的调试器事件监听器,在“click”事件上设置了断点。这导致函数停止在SharePoint JavaScript文件内部。.js文件有一个非常复杂的名称,但文件顶部的注释是MicrosoftAjax.js,所以我认为那才是真正的文件名。该文件只有3行很长的代码(因此函数都在一行上,我不确定如何调试它),而调用堆栈仅显示MouseEvent本身。 - user1226409

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接