我有一个Jquery UI对话框,在填写表单后弹出以确认项目的创建。由于表单的各种需要,我在更新面板中有表单,特别是因为我希望在表单上完成验证而不重新加载页面。
JavaScript似乎无法在异步回发上重新加载。这意味着当表单成功并且我将变量'formSubmitPass'更改为true时,它不会通过<%= formSubmitPass%>传递给Javascript。如果我在提交按钮中添加一个触发器来执行完整的回发,它就可以工作。但是,我不希望提交按钮执行完整的回发,因为我说我可以在更新面板中验证表单。
我怎么能这样,所以我的表单异步验证,但是当表单成功完成并且项目保存到数据库时,我的javaScript会正确重新加载?
使用Javascript:
var formSubmitPass = '<%= formSubmitPass %>';
var redirectUrl = '<%= redirectUrl %>';
function pageLoad() {
$('#formPassBox').dialog({
autoOpen: false,
width: 400,
resizable: false,
modal: true,
draggable: false,
buttons: {
"Ok": function() {
window.location.href = redirectUrl;
}
},
open: function(event, ui) {
$(".ui-dialog-titlebar-close").hide();
var t = window.setTimeout("goToUrl()", 5000);
}
});
if(formSubmitPass == 'True')
{
$('#formPassBox').dialog({
autoOpen: true
});
}
那么如何从后面的代码中强制回发,或者在异步回发上重新加载JavaScript,或者以一种能够继续执行异步表单验证的方式执行此操作?
编辑:我在后面代码的最后更改了formSubmitPass:
If errorCount = 0 Then
formSubmitPass = True
upForm.Update()
Else
formSubmitPass = False
End If
所以在完整的回发中,值确实会发生变化。
答案 0 :(得分:2)
我听起来更像是更新面板正在替换html,并且你的jQuery选择器没有绑定到新元素。
尝试将.Live用于所有事件,或者在ajax更新后重新绑定(您可以使用UpdatePanel插件)
答案 1 :(得分:0)
不完全确定你要做什么。 <%= formSubmitPass %>
肯定不会被重新评估,因为这是一个仅在页面重新加载时设置的服务器变量。即使你再次执行javascript,值也不会改变。
但是,您也可以将succes
回调传递给.dialog()
方法:
$('#formPassBox').dialog({
// ...
success: function(){
// do something, e.g.
$("#formPassBox").dialog({autoOpen:false});
}
});
答案 2 :(得分:0)
我想到了这一点,对我有用的是首先将对话框javascript放在page_load中,将auto auto属性设置为false,如下所示:
function pageLoad() {
$('#formPassBox').dialog({
autoOpen: false
});
}
然后创建一个完全独立的函数:
function formSubmitPass() {
$('#formPassBox').dialog({
autoOpen: true,
width: 400,
resizable: false,
modal: true,
draggable: false,
buttons: {
"Ok": function() {
window.location.href = redirectUrl;
}
},
open: function(event, ui) {
$(".ui-dialog-titlebar-close").hide();
var t = window.setTimeout("goToUrl()", 10000);
}
});
}
然后按照这些问题所示使用RegisterStartupScript:Run javascript after form submission in update panel?和What is wrong with ScriptManager.RegisterStartupScript?
我的代码:
ScriptManager.RegisterStartupScript(Me, upForm.GetType(), "AutoPostBackScript", "formSubmitPass();", True)
注意:确保使用ScriptManager NOT ClientScript,第二个参数也使用更新面板上的GetType()。
而不是在后面的代码上使用stringbuilder(Efficient Use of the ASP.NET RegisterStartupScript method),我认为将javaScript放在后面的代码上是笨拙的,我只是创建单独的函数并调用它,这非常有用