gpt4 book ai didi

jquery - ASP.Net + jQuery + jQuery 验证插件 + UpdatePanel + nyroModal - 在每个字段上成功触发!

转载 作者:行者123 更新时间:2023-12-01 01:05:40 25 4
gpt4 key购买 nike

我有一个表单,其中包含用户用价格(数字)填充的输入字段列表。我已将它们的 css 类设置为“required”和“number”,以便 jQuery 验证插件相应地验证它们。所有这些都运行得很好。当每个字段不是数字或值丢失等时,会显示错误。

整个表单实际上位于 nyroModal(jQuery 插件)模型弹出窗口内。但这并不重要,无论如何,它只是一个 .aspx Web 表单。其中,我还使用了 UpdatePanel 并将所有内容放入其中,因为我的表单本质上是一个 2 阶段过程。用户必须在表单的第一“页”上完成一些基本步骤。当验证并起作用时,我只需隐藏/显示 UpdatePanel 中的一些元素,以向用户显示表单的下一个“页面”,这是如上所述的所有价格文本框输入字段。

我使用 ImageButton 作为验证表单的触发点。默认情况下,如果您只保留 ImageButton 的原样,.Net 将触发回发,在我的情况下是 AJAX 回发,因为这一切都发生在 UpdatePanel 内。这也是我们所希望的。出于显而易见的原因,我不想要丑陋的完整回发。

经过大量阅读后,我需要一种在 javascript 中附加到 .Net 的 PageRequestManager 的方法,以便我可以根据 jQuery 是否成功验证表单来拦截 .Net 想要进行回发的时间。所以我的逻辑是:默认情况下,不允许回发,但是当 jQuery 成功验证表单时,设置一个变量,表示现在允许回发,然后下次尝试发生回发时,它将通过。因此向用户显示成功。

这一切都运行得相当不错,但还有一个最后的问题。

jQuery 验证插件的 validate({success}) 选项似乎在每个单独字段(而不是整个表单)验证成功后错误地触发。 IE。如果我在任何一个价格输入字段中输入一个数字,此成功选项将触发并将我的 cancelPostback 变量设置为 false,这反过来意味着表单现在会提交,即使它尚未经过验证,只是因为一个字段已被验证有效的。我希望这个 validate({success}) 选项仅在验证整个表单后才会触发。

我是否错误地解释了这一点,而事实上它正在按照其本来的意思去做?如果是这样,我如何仅在验证整个表单时将 cancelPostback 变量设置为 true?

非常感谢您提供任何见解或提醒。

我用于实现验证并拦截.Net 回发事件的 jQuery 代码如下:

<script type="text/javascript">
// By default, don't allow Postback until we've successfully validated our form on the client-side.
var cancelPostback=true;

// Every single time the page loads, including every single AJAX partial postback
function pageLoad()
{
// Reset the value to say that "We don't allow Postbacks at this stage"..
cancelPostback=true;

// Attach client-side validation to the main form
$("#<%= form1.ClientID %>").validate({ success: function() { alert('validation succeeded!'); cancelPostback = false; } });

// Grab a reference to the Page Request Manager
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_initializeRequest(onEachRequest);

alert("Page Load");
}

// Our own custom method to be attached to each new/future page request..
function onEachRequest(sender, args)
{
alert("About to cancel? " + cancelPostback);
// Check to see if we need to Cancel this Postback based on Conditional Logic within this page..
args.set_cancel(cancelPostback);
}
</script>

最佳答案

我对你的解决方案有疑问,因为除了 IE 之外的所有浏览器都在 jQuery 验证器的 SubmitHandler() 函数之前触发“onEachRequest”函数。我想出了一个更优雅的解决方案,如果验证失败,只需取消回发,而不是依赖预设变量。

  Sys.Application.add_init(function() {
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_initializeRequest(onEachRequest);
});

function onEachRequest(sender, args) {
if (args.get_postBackElement().id == <%= [YourSubmitButton].ClientID %>) {
args.set_cancel(!$('#aspnetForm').valid());
}
}

关于jquery - ASP.Net + jQuery + jQuery 验证插件 + UpdatePanel + nyroModal - 在每个字段上成功触发!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/850777/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com