我正在使用Javascript创建DIV元素并使用onclientclick打开新页面。这非常有效。现在,我需要从服务器端写入它,并且必须在回发之前创建此元素。
如何在回发之前让javascript执行?
目前,我必须按两次按钮,因为第一次点击时该元素不存在。
要清楚,我需要在按钮的“OnClick”之前执行此操作。
更新:看起来在回发之前调用了Javascript函数,但在运行第二个回发之前元素没有更新。嗯
更新:不幸的是,它比这更复杂。
我正在javascript中创建一个div标签来打开一个新窗口。在div标签内,我使用的是数据绑定语法<%= Preview%>这样我就可以在服务器端访问这个元素了。从服务器端,我正在注入代码。
我认为这可能是鸡蛋问题,但不确定。
UPDATE!
不是Javascript没有先运行。它是数据绑定机制,它在我能够设置它之前读取空白变量。
嗯
答案 0 :(得分:1)
您不必依赖服务器控件来在asp.net中执行回发。只要您准备就绪,就可以通过javascript发布来更好地控制您的应用。
框架自动生成一个名为__doPostback(.....)的函数,并在每次需要进行回发时最终调用它。
如此。而不是使用服务器控制按钮,你可以有一个常规的<button onclick="foo()" />
一旦你完成所有你需要的,只需调用__doPostback函数。
asp.net为您提供了一种访问该功能的好方法 Page.GetPostbackClientEvent(我相信,但有几种方法支持这种方法) http://msdn.microsoft.com/en-us/library/system.web.ui.page.getpostbackclientevent.aspx
答案 1 :(得分:0)
在这里输入代码这对你有用吗?
的Javascript
function stuffYouWantToDo(){
//do your stuff
//then submit the .NET form
document.forms[0].submit();
}
.NET代码
<asp:button ID="Button1" onClientClick="return false;stuffYouWantToDo();"/>
这应确保您要完成的工作已完成,然后将提交表单。返回false会阻止在您第一次单击按钮时提交表单,并依赖stuffYouWantToDo函数中的调用来提交表单。
答案 2 :(得分:0)
如果您想使用jquery,可以执行以下操作:
$(document).ready(function() {
var execScript = $(".myButton").attr("href").replace("javascript:", "");
$(".myButton").attr("href", "#").click(function() {
// Add before click logic here
eval(execScript);
});
});
答案 3 :(得分:-1)
难道你不能简单地在表单中的某处添加自定义验证器吗?