在回发时运行jQuery函数(ASP.NET)
我有一个表单,它最初是通过jQuery隐藏的,点击一个按钮就会出现两个单选按钮(最初也是通过jQuery隐藏的)。单击一个单选按钮,用户将被重定向到另一个页面(这很好)。单击另一个单选按钮,通过jQuery再次显示“表单” 当“表单”中的一个字段在提交时在服务器端被验证,页面被重新加载,验证错误消息可见,但“表单”现在被隐藏(根据下面的初始jQuery) 如何使表单在回邮时可见? (我已经尝试过ASP面板和AJAX UpdatePanel,但没有效果。) **这是我的jQuery:**在回发时运行jQuery函数(ASP.NET),jquery,asp.net,postback,Jquery,Asp.net,Postback,我有一个表单,它最初是通过jQuery隐藏的,点击一个按钮就会出现两个单选按钮(最初也是通过jQuery隐藏的)。单击一个单选按钮,用户将被重定向到另一个页面(这很好)。单击另一个单选按钮,通过jQuery再次显示“表单” 当“表单”中的一个字段在提交时在服务器端被验证,页面被重新加载,验证错误消息可见,但“表单”现在被隐藏(根据下面的初始jQuery) 如何使表单在回邮时可见? (我已经尝试过ASP面板和AJAX UpdatePanel,但没有效果。) **这是我的jQuery:** // R
// Reveal Radio Fields
$(".btn-leavecomment, .txt-leavecomment").toggle(function(){
$("#commenttype").stop().animate({ down: "+=300" }, 3000)
$("#commenttype").stop().slideDown("slow");
}, function(){
$("#commenttype").stop().animate({ down: "-=300" }, 1400)
$("#commenttype").stop().slideUp("slow");
});
// Reveal Form on-click of one radio field in particular
$(".reveal_ccform").toggle(function(){
$("#ccform_container").stop().animate({ down: "+=300" }, 4000)
$("#ccform_container").stop().slideDown("slow:4000");
}, function(){
$("#ccform_container").stop().animate({ down: "-=300" }, 4000)
$("#ccform_container").stop().slideUp("slow:4000");
});
新添加的JavaScript实现(根据Moar的建议)这仍然不起作用,有什么想法吗(:
JavaScript:
<script type="text/javascript">
$(document).ready() {
function isPostBack()
{
if (!document.getElementById('clientSideIsPostBack'))
{
return false;
if (document.getElementById('clientSideIsPostBack').value == 'Y' )
return true;
}
// Reveal Comment Type
$(".btn-leavecomment, .txt-leavecomment").toggle(function () {
$("#commenttype").stop().animate({ down: "+=300" }, 3000)
$("#commenttype").stop().slideDown("slow");
}, function () {
$("#commenttype").stop().animate({ down: "-=300" }, 1400)
$("#commenttype").stop().slideUp("slow");
});
// Reveal Sign Guestbook Form
$(".reveal_ccform").toggle(function () {
$("#ccform_container").stop().animate({ down: "+=300" }, 4000)
$("#ccform_container").stop().slideDown("slow:4000");
}, function () {
$("#ccform_container").stop().animate({ down: "-=300" }, 4000)
$("#ccform_container").stop().slideUp("slow:4000");
});
// Hide 'Leave a Comment' button and 'Comment Type' div
$('.reveal_ccform').click(function () {
$(".btn-leavecomment").stop().fadeOut("slow:1500"),
$('#commenttype').slideUp("slow:8000");
});
}
}
</script>
我建议将您显示的所有javascript放在一个函数中
myFunction();
然后,在您的代码隐藏中,将其放在一个页面事件中(我建议您加载页面)
这将向页面注入javascript,仅当该页面是回发时才会运行您的函数。当发生回发时,您通过jQuery对该页面所做的任何更改都将丢失 我不确定您是否正在使用UpdatePanels,但在这种情况下还有其他问题。请阅读以下内容: 如果您没有使用UpdatePanels,我会说您只需要在回发期间使表单在服务器端可见(form.visible)
asp.net webforms模型确实很有用,但它肯定不是在考虑jQuery的情况下设计的。在我看来,如果你想充分利用web 2.0类型的方法,你可能需要考虑放弃使用回发/更新面板,更多地使用web服务等等……就我个人而言,这绝对是在吸引我无情地走向MVC。这听起来很烦人,但要做到这一点 我会使用隐藏值 比如说,当你打开表单时,将隐藏值更新为1 页面HTML
input type="hidden" id="hiddenFormOpen" value="1" runat="server"
C#代码隐藏
if (IsPostBack)
ClientScriptManager.RegisterClientScriptBlock(this.GetType, "myFunction",
"openForm("+hiddenFormOpen+")", true);
Javascript函数
function openForm (val)
{
if (val ==1)
{
Update form visibility here
}
}
第二种选择是避免执行服务器端回发,使用JQuery执行完全基于客户端的回发,从而消除回发Hi Moar。我将代码添加到page_load事件中,并将JavaScript放入如您所说的函数中,但它仍然不起作用。请参阅新添加的JavaScriptabove@Dan看完之后您发布的代码我找不到名为“openForms”的函数我缺少什么吗?是的,对不起,我正在尝试不同的东西,应该已经恢复,openForms函数只是iPostback函数的另一个名称,我有太多的东西称为iPostback,这让我很困惑(我想我有一个var,funct名称,然后立即在c#中调用它)。我很抱歉。我只是不确定语法以及如何告诉JavaScript中打开的元素。接下来的两个步骤是:1)在Chrome开发者工具中打开页面,看看是否有JavaScript错误。2)在Chrome开发者工具中打开您的页面,检查并查看您正在注入的函数($(document).ready(openForms);)是否真的进入了正确包含在脚本标记中的页面。如果您通过了这两个测试,那么请尝试调用openForms();在开发人员工具的控制台中,查看它是否执行了您希望它执行的操作。
if (IsPostBack)
ClientScriptManager.RegisterClientScriptBlock(this.GetType, "myFunction",
"openForm("+hiddenFormOpen+")", true);
function openForm (val)
{
if (val ==1)
{
Update form visibility here
}
}