当前位置: 首页 > 面试题库 >

jQuery验证插件:在对ajax调用servlet时,submitHandler不会阻止默认提交-返回false无效

茅和玉
2023-03-14
问题内容

我有一个使用jquery和servlet的简单表单。jQuery对Servlet进行Ajax调用,然后Servlet进行一些服务器端计算,然后通过jQuery在同一页面上显示结果。我不希望表单进行默认的提交(并转到servlet),因为我想停留在同一页面上并动态显示结果。它完全按照我想要的方式工作:

HTML:

<form name="form1" action="FormHandler1" method="POST" class="stats-form">
    <input class="stats-input" id="number0" type="text" name="number0">
    <input id="number1" type="text" name="number1">
    <input id="number2" type="text" name="number2">
    <input id="number3" type="text" name="number3">
    <input type="submit" value="Calculate" class="calculate-stats" name="stats-submit">
</form>

jQuery的:

form.submit (function(event) {
    $.ajax({
        type: form.attr("method"), // use method specified in form attributes
        url: form.attr("action"), // use action specified in form attributes (servlet)
        data: form.serialize(), // encodes set of form elements as string for submission
        success: function(data) {
            // get response form servlet and display on page via jquery 
        }
    });
    event.preventDefault(); // stop form from redirecting to java servlet page
});

现在,我想添加表单验证,因为该servlet期望十进制数来进行计算。应该只允许用户输入数字,不能输入其他字符。为此,我采用了流行的jQuery
Validation
插件。

验证工作正常,但是要对servlet进行ajax调用,我必须使用jQuery
Validation提供的SubmitHandler,而不是上面显示的jQuery
Submit方法。当我使用验证submitHandler时,将执行表单上提交的默认操作,转到Servlet页面,而不是停留在同一页面上以在jQuery中动态显示我的结果。我必须向formHandler传递一个表单,而不是像以前那样传递一个事件,这使我能够阻止默认操作。唯一的选择是返回false,但是它不起作用。在过去的两天里,我一直在努力解决这个问题,并且已经使我的google-
fu筋疲力尽了。这是给我悲伤的新代码:

form.validate({
       rules: {
            number0: ruleSet,
            number1: ruleSet,
            number2: ruleSet,
            number3: ruleSet,
        },
        submitHandler: function (form) {

            $.ajax({
                type: "POST",
                url: form.attr("action"),
                data: form.serialize(),
                success: function () {
                    // get response from servlet and display on page via jQuery 
                }
            });
            return false; // required to block normal submit ajax used
        }
 });

任何帮助将不胜感激,我想使用这种整洁的jQuery表单验证,但我可能只是从头开始编写自己的jQuery验证,以便可以使用已经使用的表单提交方法。


问题答案:

到提交事件触发时,为时已晚,无法阻止表单提交。您应该绑定到提交按钮上的click事件,并使用event.preventDefault()阻止其提交。如果验证例程成功完成,则可以使用$
.serialize()和$ .submit()手动提交表单。



 类似资料:
  • 问题内容: 在我看来,我想使用ajax将表单提交给控制器。我有这个: 请求完成并成功完成后,我应该会在控制台中收到一条消息,并收到一个Toastr通知,但是我什么都没有收到,也没有收到任何控制台错误,但是我输入的记录已成功输入,因此,意味着该表单是通过常规MVC约定提交的。 如何使我的Ajax提交工作? 更新资料 在下面用Sparky进行评论后,我将代码更改为: 现在,如果表单为空..而我按下了创

  • 问题内容: 我使用bassistance.de的jQuery验证程序插件(1.11)并通过php提交。现在,我在javacript代码的末尾的提交处理程序中添加了一个ajax调用,但是该调用不起作用,firebug控制台也不存在。 案例1 如果我在网站的开头放置了ajax调用,它可以工作,但是不再可以看到验证器插件。 案例2 如果我将调用放入提交处理程序中,则该调用不存在,并且表单由php提交。

  • 问题内容: 我收到了一个我无法复制的错误报告,但是ajax调用超时是当前的最佳猜测。 因此,我试图找出jQuery 调用超时的默认值。有人有主意吗?在jQuery文档中找不到。 在此先感谢Marcus 问题答案: 似乎没有标准化的默认值。我感觉默认值为,而超时事件完全取决于浏览器和网络设置。 对于IE,还有对XmlHttpRequests超时属性在这里。它默认为null,表示网络堆栈很可能是第一个

  • 本文向大家介绍jquery实现表单验证并阻止非法提交,包括了jquery实现表单验证并阻止非法提交的使用技巧和注意事项,需要的朋友参考一下 代码检测textarea内填写的长度,未填写时提示需要重新填写,少于15字符时提示需要长于15字符,成功时显示所填写建议。 >关键点 1.必须要有onSubmit="return confirm();" return 这个词,不可缺少。 2.自行完整的网页结构

  • 问题内容: 我不确定我要去哪里。这个想法是在提交表单之前,输入字段之一通过ajax发送到服务器端验证器。如果响应为1,则输入有效且应提交表单。如果响应为0,则不应提交该表单。问题是我不知道如何在ajax请求函数中设置一个变量,以防止表单被提交。这就是我所拥有的: 问题答案: 问题在于请求是异步的,需要一段时间才能完成。因此,该函数会继续执行并在成功执行事件之前返回false。 为了解决这个问题,您

  • 本文向大家介绍jQuery Real Person验证码插件防止表单自动提交,包括了jQuery Real Person验证码插件防止表单自动提交的使用技巧和注意事项,需要的朋友参考一下 本文介绍的jQuery插件有点特殊,防自动提交表单的验证工具,就是我们经常用到的验证码工具,先给大家看看效果。 效果图如下: 使用说明 需要使用jQuery库文件和Real Person库文件 同时需要自定义验证