我的aspx页面中有一个简单的按钮:
<asp:Button ID="a1" runat="server" OnClientClick="test2();" />
和javascript函数是:
function test2() {
setTimeout("alert('hello')", 1250);
}
完全忽略SetTimeout - 警报不会显示,计时器也不会等待。 我在网站上阅读了大约10篇关于这个问题的帖子,没有一个解决方案有效。 我尝试调用另一个函数而不是alert函数,我尝试使用函数(){..}调用函数。 我也尝试直接从OnclientClick函数调用Settimeout:
OnClientClick="setTimeout('alert(\'hello\')',1250);"
无效,Settimeout被忽略! 我正在使用ie9。
答案 0 :(得分:2)
请尝试:
window.setTimeout(function () { alert('hello'); }, 1250);
答案 1 :(得分:2)
JavaScript运行良好。该页面看起来一样,javascript看起来不起作用,但一切都按设计工作。
这是发生了什么......
用户点击该按钮。 JavaScript被执行。 settimeout已设置并开始计时。 runat =“server”现在发布到服务器(但是超时仍在下降) 对象代码OnClick事件在服务器上运行(页面正在重建服务器端)。 将新的响应流发送到客户端浏览器。 客户端浏览器捕获它并呈现“新”页面重置新页面的javascript(这是您要求的新ASPX页面。)。
因此,即使是另一个表单元素上的runat =“server”,也会阻止settimeout或setinterval方法最终执行。
IMO更好的代码方法是在客户端使用AJAX将值发布到服务器,在服务器的页面上捕获它们,构建html或javascripts并将它们发送回客户端浏览器以捕获和要么替换元素id的innerHTML,要么eval javascript ...减少开销,更快,更好,更优雅,更多控制。如果使用.NET构建HTML片段,则可以使用stringbuilder,因为这比多个字符串连接要快得多。
希望这会有所帮助。