javascript - 如何使用 jQuery 代码解决此 setCustomValidity 解除绑定(bind)问题

标签 javascript html jquery validation constraint-validation-api

我正在使用内置的 HTML 验证方法来验证表单中的出生日期。

该表单具有三个选择列表元素:

  • user_dob_date
  • user_dob_month
  • user_dob_year

所有三个元素都已被设置为验证的“必需”元素,因为用户必须选择有效的选项。

用户填写完所有三个选项后,用于选择至少一个选项的 HTML 验证会顺利进行。但我想检查闰年的日期,并确保用户没有选择 1998 年 2 月 31 日之类的日期。

这是我执行此操作的代码:

$('#form-signup-next').submit(function(){                       
   if($('#user_dob_month').val()=='2' && $('#user_dob_date').val()>29 ){
        var obj=$('#user_dob_date')[0];
        alert($('#user_dob_month').val());
        obj.setCustomValidity('Invalid Date!');         
   }else{
        var obj=$('#user_dob_date')[0];
        obj.setCustomValidity('');
    }
    return false;
    });

有几个问题

  • 单击提交时不会显示自定义消息。如果单击该按钮两次,则会执行此操作。第一次单击它可能设置了消息但不显示,第二次单击显示错误

  • 如果在错误选择和显示自定义消息后,如果日期固定并且我们尝试提交表单,它仍然会抛出错误。

最佳答案

您不应该在提交表单时执行此操作,因为一旦设置了 setCustomValidity 值,它将不允许提交表单,除非验证错误值明确并且在您的代码中问题是您正在清除提交时的错误值。因此,这就是即使您在下次运行时更正了该值,也会收到验证错误的原因。

详情请查看此链接 CURRENT IMPLEMENTATION ISSUES AND LIMITATIONS(specially Problem 3)

好的,现在您可以通过这种方式执行此操作..通过检查并设置下拉值更改事件的错误消息

$('#user_dob_date,#user_dob_month').on('change',function(){
    if($('#user_dob_month').val()=='2' && $('#user_dob_date').val()>29){
    $('#user_dob_date')[0].setCustomValidity('Invalid Date!');
    }
    else{
    $('#user_dob_date')[0].setCustomValidity('');
    }
  });

我检查了这个,它工作正常。

现在,当用户选择错误的组合并按下提交按钮时,它将显示错误消息。

试试这个 http://jsbin.com/aqicim/1

关于javascript - 如何使用 jQuery 代码解决此 setCustomValidity 解除绑定(bind)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15315747/

相关文章:

javascript - Share.js 无法与 Express.js 一起使用

javascript - 迭代对象数组并按键返回具有合并数组的新对象的 JavaScript 方法是什么?

javascript - 追加到由 ul 制成的数组

PHP : Must login twice until session variables are set

jquery - 打开具有特定日期的日期选择器

javascript - websocket.close()函数继续运行后

javascript - 我的 JS 无法处理我的 html/css。不知道为什么。 (控制台错误 'ReferenceError: $ is not defined')

html - 按钮加载 react-hooks-nextjs

javascript - 如何从 PHP 文件中检索 JSON 数据?

javascript - 提交表单时如何调用方法?