【问题标题】:jQuery validation is not happening没有发生 jQuery 验证
【发布时间】:2020-02-18 14:40:08
【问题描述】:

我的页面上有这个脚本:

 <script type='text/javascript'>
    $(document).ready(function() {
        $('#TotalHours').attr('name', 'TotalHours'); // jQuery validation requires field names to be set

        $.validator.addMethod("hours", function(value, element) {
            var totalHours = 0;
            $('select').each(function(i, sel) {
                var hours = $(sel).find(":selected").text();
                if (hours != "")
                    totalHours += parseFloat(hours);
            });
            var reportedTotalHours = parseFloat($("#TotalHours").text());
            var difference = abs(totalHours - reportedTotalHours);
            return difference >= 0.25; // discrepancy must be less than a quarter hour
        });

        $('form').bind('submit', function() {
            $("#TheForm").validate({
                rules: {
                    TotalHours: {
                        hours: true
                    }
                }
            });
        });
    });
</script>

前几天我让它工作了但是现在提交表单时它没有经过验证(如果我在绑定到submit的函数内设置断点,它永远不会被击中)......我能做什么坏了吗?

编辑:这是提交按钮的处理程序,以防万一:

<script type='text/javascript'>
function __E374_onclick(){
    try{$("#TheForm").validate();
    if(!$("#TheForm").valid()){alert('The data you have entered is not valid. Please complete all required fields and correct any data entry errors.'); return;}
    var pm=$("#TheForm").serialize();$.post("/Action/Do/", pm, function(d){
        switch(true){
            case (null==d):dm("The server returned an unexpected response.");break;
            case (!d.Valid):case (!d.Successful):dm(d.Message);break;
            case (d.Successful):dm(d.Message);fu("EditAssessment");break;
            default:dm("An unexpected condition occurred.");break;}});
}catch(e){}}
</script>

以及提交按钮本身:

<input type='button' id="__E374" class="button" value="Save" onclick="__E374_onclick();"/>

【问题讨论】:

  • 标记中的 ID 已更改?不,您只绑定到“表单”,所以不是那样。我假设 jQuery 已加载?提交时控制台中有什么?
  • 我提交时控制台中有什么?不知道你的意思...
  • .bind() has been deprecated 有一段时间了,那么你使用的是什么版本的 jQuery?您不应该将 .validate() 方法放在 submit 处理程序中 - 只需参考在 SO 上标记为 jQuery Validate 的 6000 个工作示例之一。其次,相关和渲染的 HTML 在哪里,我们可以自己尝试一下?
  • 我正在使用 jQuery v1.11.2,看起来像。我无法获取 HTML 源代码,因为它是动态生成的,因此它不会出现在我的浏览器的查看源代码中。
  • 浏览器 DOM 是动态更新的,因此您可以在开发人员的工具中查看呈现的 HTML,而不是页面源代码。也许谷歌如何使用开发者的控制台进行故障排除和检查。

标签: javascript jquery jquery-validate


【解决方案1】:
$('form').bind('submit', function() {
    $("#TheForm").validate({
        ....

您不能将.validate() 包装在提交处理程序中。该插件已经自动捕获提交事件,所以这是没有意义的;它会阻止插件在表单上初始化自身,直到第一次提交事件。 (顺便说一句 - jQuery .bind() 已被弃用)

.validate() 方法用于初始化表单上的插件,并在创建表单后调用,最常见的是在 ready 事件处理程序中。

<input type='button' ....

插件忽略来自&lt;button&gt;type="button" 的点击。您需要将其更改为 type="submit"

典型用法和示例请参考the SO Wiki page

【讨论】:

  • &lt;input type="button"&gt; 更改为type="submit" 似乎已修复,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-14
  • 1970-01-01
  • 2023-02-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多