Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在不使用提交按钮的情况下触发标准HTML5验证(表单)?_Javascript_Jquery_Forms_Html - Fatal编程技术网

Javascript 在不使用提交按钮的情况下触发标准HTML5验证(表单)?

Javascript 在不使用提交按钮的情况下触发标准HTML5验证(表单)?,javascript,jquery,forms,html,Javascript,Jquery,Forms,Html,有谁知道我如何不用提交按钮就能在表单中触发标准HTML5验证?(JavaScript或jQuery) 我不想发送POST/GET请求,只做验证。接受的答案似乎就是你要找的 简短摘要:在提交的事件处理程序中,调用event.preventDefault()您必须提交表单才能使html5验证生效。有办法得到你想要的。请参阅守则: <body> <h1>Validation Example</h1><br /> <h2>Ins

有谁知道我如何不用提交按钮就能在表单中触发标准HTML5验证?(JavaScript或jQuery)

我不想发送
POST/GET
请求,只做验证。

接受的答案似乎就是你要找的


简短摘要:在提交的事件处理程序中,调用
event.preventDefault()
您必须提交表单才能使html5验证生效。有办法得到你想要的。请参阅守则:

<body>
    <h1>Validation Example</h1><br />
    <h2>Insert just 1 digit<h2>
    <form id="form" onsubmit="return false">
        <label>Input<input type="text" pattern="[0-9]" id="input" /></label> 
        <input type="submit" class="hide" id="inputButton">         
    </form>
</body>

验证示例
只插入1位数字 输入
看一个例子

注意:使用form.submit()对我不起作用。所以我创建了一个隐藏的提交按钮,它在keyup上触发。别问我为什么。也许有人可以澄清一下

form.submit()不起作用,因为HTML5验证是在表单提交之前执行的。
当您单击提交按钮时,HTML5验证将被触发,如果验证成功,则表单将被提交。

简短回答,不,在提交表单之前,无法内联“触发”HTML5气泡的默认功能,您可以对某些输入执行
检查有效性(),但这也不是你想要的。如果您仍然希望在验证完成后提交表单,除了防止默认设置之外,您仍然可以通过执行以下操作来处理此样式:

注意,对于不希望应用验证css样式的表单,只需向表单添加
novalidate
属性即可

HTML:

<form name="login" id="loginForm" method="POST">
    <input type="email" name="username" placeholder="Email">
    <input type="password" name="password" placeholder="Password">
    <input type="submit" value="LOG IN" class="hero left clearBoth">
</form>
form:not([novalidate])            {
  input, textarea                 {
    &:required                    {background: transparent url('/../../images/icons/red_asterisk.png') no-repeat 98% center;}
    &:required:valid              {background: transparent url('/../../images/icons/valid.png') no-repeat 98% center; @include box-shadow(0 0 5px #5cd053);border-color: #28921f;}
    &:not(:focus):valid           {box-shadow: none;border: 1px solid $g4;}
    &:focus:invalid               {background: transparent url('/../../images/icons/invalid.png') no-repeat 98% center;  @include box-shadow(0 0 5px #d45252); border-color: #b03535}  
  }
}
span.formHintBubble {position:absolute; background:$g7; margin-top:50px;@include borderRadius(10px); padding:5px 40px 5px 10px; color:white; @include opacity(0.9); @include box-shadow(1px 1px 6px 1px rgba(0,0,0,0.2));
  &:after {
     @include triangle(30px, $g7, up); content: " "; margin-bottom:27px; left:25px;
  }
  .cross {background:black; border:1px solid $g3; @include borderRadius(10px); width:15px; height:15px; color:#fff; display:block; line-height:15px; position:absolute; right:5px; top:50%; margin-top:-7.5px; padding:0; text-align:center; font-size:10px; cursor:pointer;}
}
JAVASCRIPT:

<form name="login" id="loginForm" method="POST">
    <input type="email" name="username" placeholder="Email">
    <input type="password" name="password" placeholder="Password">
    <input type="submit" value="LOG IN" class="hero left clearBoth">
</form>
form:not([novalidate])            {
  input, textarea                 {
    &:required                    {background: transparent url('/../../images/icons/red_asterisk.png') no-repeat 98% center;}
    &:required:valid              {background: transparent url('/../../images/icons/valid.png') no-repeat 98% center; @include box-shadow(0 0 5px #5cd053);border-color: #28921f;}
    &:not(:focus):valid           {box-shadow: none;border: 1px solid $g4;}
    &:focus:invalid               {background: transparent url('/../../images/icons/invalid.png') no-repeat 98% center;  @include box-shadow(0 0 5px #d45252); border-color: #b03535}  
  }
}
span.formHintBubble {position:absolute; background:$g7; margin-top:50px;@include borderRadius(10px); padding:5px 40px 5px 10px; color:white; @include opacity(0.9); @include box-shadow(1px 1px 6px 1px rgba(0,0,0,0.2));
  &:after {
     @include triangle(30px, $g7, up); content: " "; margin-bottom:27px; left:25px;
  }
  .cross {background:black; border:1px solid $g3; @include borderRadius(10px); width:15px; height:15px; color:#fff; display:block; line-height:15px; position:absolute; right:5px; top:50%; margin-top:-7.5px; padding:0; text-align:center; font-size:10px; cursor:pointer;}
}
在这里,我们可以做一些有趣的事情来使用默认消息,并在您自己的“气泡”或错误消息框中继承它们

var form    = $('form');
var item    = form.find(':invalid').first();
var node    = item.get(0);                       
var pos     = item.position();                
var message = node.validationMessage || 'Invalid value.'; 
var bubble  = $('<span/>').html('<span class="formHintBubble" style="left: ' + pos.left  + 'px; top:' + pos.top + 'px;">' + message + '<div class="cross">X</div></span>').contents();        
bubble.insertAfter(item); 
var form=$('form');
var item=form.find(':invalid').first();
var节点=item.get(0);
var pos=item.position();
var message=node.validationMessage | |“无效值”;
var bubble=$('').html(''+message+'X').contents();
气泡。插入器(项目);
演示:

享受HTML5表单验证的乐趣,我希望我能帮助其他人,因为它太棒了,而且它需要走出去


香农

经过一些研究,我想出了以下代码,应该是你问题的答案。(至少它对我有用)

首先使用这段代码。
$(document.ready
确保在表单加载到DOM中时执行代码:

$(document).ready(function()
{
    $('#theIdOfMyForm').submit(function(event){
        if(!this.checkValidity())
        {
            event.preventDefault();
        }
    });
});
然后只需调用
$('#theIdOfMyForm').submit()在您的代码中

更新

如果您确实想显示用户在表单中错误的字段,请在
event.preventDefault()之后添加以下代码


它将重点关注第一个无效输入。

如其他答案中所述,使用event.preventDefault()防止表单提交

在我编写一个小jQuery函数之前检查表单,您可以使用它(注意,元素需要一个ID!)

示例用法

 $('#submitBtn').click( function(e){

        if ($('#registerForm').isValid()){
            // do the request
        } else {
            e.preventDefault();
        }
    });
我在用

objectName.addEventListener('click', function() {
event.preventDefault();
}
但是它的显示错误“事件未定义”,因此在本例中使用如下事件参数

objectName.addEventListener('click', function(event) {
event.preventDefault();
}

现在它可以正常工作了

我知道这是一个老话题,但是当有一个非常复杂(特别是异步)的验证过程时,有一个简单的解决方法:

<form id="form1">
<input type="button" onclick="javascript:submitIfVeryComplexValidationIsOk()" />
<input type="submit" id="form1_submit_hidden" style="display:none" />
</form>
...
<script>
function submitIfVeryComplexValidationIsOk() {
    var form1 = document.forms['form1']
    if (!form1.checkValidity()) {
        $("#form1_submit_hidden").click()
        return
    }

    if (checkForVeryComplexValidation() === 'Ok') {
         form1.submit()
    } else {
         alert('form is invalid')
    }
}
</script>

...
函数提交ComplexValidationOK(){
var form1=document.forms['form1']
如果(!form1.checkValidity()){
$(“#表单1_提交_隐藏”)。单击()
返回
}
如果(checkForVeryComplexValidation()=='Ok'){
表格1.提交()
}否则{
警报('表单无效')
}
}
我认为它更简单:

$('submit').click(function(e){
if (e.isValid())
   e.preventDefault();
//your code.
}
这将停止提交,直到表单有效。

您可以使用,但是它的浏览器支持还很差。它适用于Chrome、Opera和Firefox,但不适用于IE、Edge或Safari:

var myform = $("#my-form")[0];
if (!myform.checkValidity()) {
    if (myform.reportValidity) {
        myform.reportValidity();
    } else {
        //warn IE users somehow
    }
}

(具有更好的支持,但在IE上不起作用请尝试使用HTMLFormElement.reportValidity(),其中此函数将调用输入验证。

这是我对@mhm建议的解决方案的实现,在这里我放弃了使用jQuery

变量formId包含表单的id,msg是一个包含应用程序消息的对象

此实现尝试使用本机HTML5错误消息通知用户,如果不可能,则向通用表单错误消息发出警报

如果没有错误,我将提交表格

let applyForm = document.getElementById(formId);

if (!applyForm.checkValidity()) {
  if (applyForm.reportValidity) {
    applyForm.reportValidity();
  } else {
    alert(msg.ieErrorForm);
  }
} else {
  applyForm.submit();
}

这对我来说并没有解决问题。使用Chrome 27,当我阻止默认设置时,它会跳过HTML5验证以及可能重复的jQuery。每个函数都在这个答案发布后发生了变化(?)。现在它有两个稍微令人困惑的排列。上面使用的。每个都不再有效。我会使用:var$list=$(f)。查找(':输入:可见[required=“required”]);$。每个($列表,函数(idx,el){从if语句中删除!对我来说,这会破坏它。为不同的问题发布相同的答案不是一个好主意。您发布的答案与此完全相同。如果您认为发布答案的两个问题都是相同的,那么您可以为一个问题发布此答案,并将另一个问题标记为第一个问题的副本ne…一年后,根据我可以使用的内容,这在所有四种主要浏览器的最新版本中都得到了支持: