覆盖html5验证

时间:2012-02-09 17:53:25

标签: javascript jquery html html5 javascript-events

我正在处理一个简单的登录表单,其中有两个字段:

<form>
  <input type="email" name="email" required />
  <input type="password" name="password" required />
  <button type="submit">Log in</button>
</form>

对于现代浏览器,会自动触发验证。

但是,如果javascript可用,我想接管html5表单验证,并自己处理所有内容。

我想自动验证'onblur'(仅受影响的字段),并且我想在点击'submit'时验证所有字段。

onblur事件工作正常,但是当按下“submit”时,不会触发标准的“submit”事件。但是,会触发“无效”事件;但仅适用于第一个无效事件。

告诉浏览器忽略所有与HTML5相关的验证并接管整个过程有什么好方法?

5 个答案:

答案 0 :(得分:12)

请注意 - 即使某些浏览器可能支持 INPUT 元素上的 novalidate 属性,HTML代码也无法验证。

根据文件,没有这样的属性。只有 FORM 元素可能包含 novalidate 属性。

答案 1 :(得分:4)

这个答案是不正确的。请参阅willydee的回答。

简单,只需将novalidate属性添加到您不希望浏览器验证的任何元素,如下所示:

<form>
  <input type="email" name="email" required novalidate />
  <input type="password" name="password" required />
  <button type="submit">Log in</button>
</form>

由于您希望仅在JavaScript可用时取消验证,请使用JavaScript添加(使用jQuery作为简化示例)

$('input[novalidate]').attr('novalidate', 'novalidate');

答案 2 :(得分:1)

如果您使用jQuery,另一个选择是删除属性。

$("input[required],select[required],textarea[required]").removeAttr('required');

答案 3 :(得分:0)

也许您可以使用javascript将所有“必需”属性转换为“需要数据”,因为您可以使用javascript处理它们并使用您自己的处理程序覆盖html5表单验证

答案 4 :(得分:0)

如果您要进行有条件的HTML5验证操作。

我的条件是,如果用户要保存数据,我想停止验证,但是要发送表单时,我要验证。

<button name="btn_act" value="Submit" type="submit" class="btn">Submit</button>
<button name="btn_act" value="save" type="submit" class="btn">Save</button>

$(document).on('click','[name="btn_act"]',function(){

        var $form = $(this).closest('form');
        //console.log($form);
        if(this.value === 'save')
            $form[0].noValidate = true;
        else
            $form[0].noValidate = false;
        //$form.data('validator').cancelSubmit = true;
        //$form.submit();
    });