【问题标题】:How to run function if html form is invalid?如果 html 表单无效,如何运行函数?
【发布时间】:2020-02-07 08:29:26
【问题描述】:

我正在制作一个表格。如果表单无效,我需要通过更改按钮样式和文本提供反馈,以便用户知道他们尝试执行的操作未执行。

如果表单是有效,这就是我要运行的函数,它工作得很好。

$('#form').submit(function(event){
    // cancels the form submission
    event.preventDefault();

    // do stuff if form valid
    $("#btn-copy").html('COPY SUCCESS')
    console.log('Text is copied.')
});

如果表单无效,我需要运行函数。如果表单有效,则单击和提交都已注册,因此这两个函数会发生冲突。这是我目前失败的解决方法,因为如果表单有效按钮会说 COPY FAIL、COPY SUCCESS、COPY,而不是 COPY SUCCESS

$("#btn-copy").click(function(){
    $(this).html('COPY FAIL');
    setTimeout(function(){
        $('#btn-copy').html('COPY');
    },1000);
   console.log('COPY FAIL.')
})

我如何运行函数只有当提交按钮被点击,但表单无效(因此,提交没有被触发)。反之,如果表单有效,则只运行我的有效函数。

注意:按钮必须是 type:submit 因为我使用的第一个有效代码,除非有其他选项可以实现我想要实现的目标,因为我不想提交事件,这就是我做事件的原因。防止默认()

【问题讨论】:

  • 您是否尝试过使用链接作为按钮?点击后,只需触发验证,如果有效则提交表单。
  • 您是否也尝试将event.preventDefault(); 添加到点击事件中?然后它不会提交。
  • 也有点困惑,因为没有明显的检查 - 如果你点击按钮失败,但如果你提交它没关系?但是按钮必须是提交按钮吗?最简单的答案当然是没有 type=submit 按钮,如果通过了就调用 form.submit()。
  • 好吧,我很抱歉造成误解,是的,我需要做一些检查以确定表格是否有效,但我不确定如何。我只如何通过 .submit 检查表单是否有效。所以我在想的是在点击时运行我的“无效函数”。这是有效的,因为如果我单击按钮并且表单无效,则单击中的任何功能都会运行。如果我的表单有效,则单击并提交注册表都会出现问题。我假设如果 event.preventdefault() 到 onclick,那么如果我的表单有效,提交将不会运行并且我的表单将继续失败。不会吗?

标签: javascript jquery html css


【解决方案1】:

如果无效,点击按钮如果表单无效,通过更改按钮样式和文本提供反馈。如果有效,并且点击按钮,.submit 函数运行。

$("#btn-copy").click(function(e){
   if(document.getElementById('form-pesan').checkValidity()){
    console.log('form valid and button clicked');
      $(this).html('RUN');        
   }
   else {
    console.log('form invalid and button clicked');
       $(this)
         .html('Please Recheck Form')
         .attr("disabled", true);
       setTimeout( function(){
        $("#btn-copy") 
         .html('RUN')
         .attr("disabled", false);
       },1500);
   }
});

  // Submit is always triggered only if validity is true
  $('#form').submit(function(event){
    // cancels the form submission (personal need).
    event.preventDefault();

    // MY COMMANDS
    $("#btn-copy").html('RUN SUCCESSFULLY');
    console.log('Form is valid and button is pressed');
    setTimeout(function(){
      $('#btn-copy').html('RUN');
     },1000);
  })
})

【讨论】:

    【解决方案2】:

    如果是这种情况,我会使用链接作为按钮。如果需要,您可以使用 CSS 设置样式。然后,如果单击它,您可以执行验证。我做了一个简单的例子,如果用户没有输入至少 6 个字符长的用户名,则表单无效,否则有效:

    <form method="post" action="/some-random-action.html">
      <input type='text' class='form-control' placeholder='username' id="username">
      <small class='form-text text-muted'>Username must be at least 6 characters</small>
      <br>
      <a href="#" class="btn btn-primary" id="submit-btn">
        Submit
      </a>
    </form>
    

    那么我们就可以简单的使用那个点击触发验证:

    $('#submit-btn').on('click', function() {
        if($('#username').val().length < 6) {
            alert("Hey, that username isn't like enough bro");
        }
        else {
            $('form').submit();
        }
    });
    

    【讨论】:

    • 这与使用button type=button 有何不同,除了使用&lt;a&gt; 语义不正确(&lt;button&gt; 也应该如此)。
    • 我需要设置按钮而不是输入的样式。如果我没有正确地用词,我很抱歉我正在尝试检查表单本身是否无效,而不是检查输入是否无效。
    • @LordSacha “我正在尝试检查表单本身是否无效”是什么意思?
    • 表单本身无效意味着该表单中有 1 个或多个输入无效。在 chrome 中表示有黄色感叹号。所以如果有一个或多个输入无效运行 function(){$('#btn').html('Retry')};
    • @LordSacha 好的,您在表单中寻找的具体验证类型是什么?通常,验证警告(例如 chrome 中的黄色感叹号)是基于您为该输入设置的一些有效标准。什么会触发您的代码失效?
    【解决方案3】:

    我假设您正在使用一些验证插件或手动检查表单验证。

    我创建了一个jsfiddle

    HTML 标记:

    <form action="/" id="form">
      <input type="text" id="username" />
      <button type="submit">Submit</button>
    </form>
    
    <h2 id="result"></h2>
    

    JS代码:

    $('#form').submit(function(event){
        if ($('#username').val().length < 6) {
    
          // you code if validation failed
    
            event.preventDefault();
          $("#result").html('COPY FAILED');
        } else {
    
          // you code if validation succeed and form is valid
          // it will auto submit form, so no need to register 
          // submit and click event separatly.
          $("#result").html('COPY SUCCESS');
        }
    
    });
    

    【讨论】:

    • 是否有办法确定表单本身是否有效,而不是检查每个输入的有效性?
    • 是的,你可以,这就是为什么我问你是否使用了一些验证插件。看看这个stackoverflow.com/questions/6658937/…。你可以在if 的情况下使用这个$("#form_id").valid()
    • 不,我现在只使用 required 和 type=tel html 验证。如果这不容易完成,那么我会考虑使用该插件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-30
    • 2020-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多