【问题标题】:onsubmit's function for not workingonsubmit 的功能不工作
【发布时间】:2016-12-27 19:32:13
【问题描述】:

在发布我的主题之前,我搜索了很多主题,但没有发现任何有趣的东西。因此,如果我没有看到另一篇带有有效答案的帖子,我很抱歉重复...

所以,这是我的问题:我的表单,当我想提交它时,不要做任何事情。我已经准备了错误消息或验证消息,但提交表单后我看不到它们...

这是我的 HTML:

<form method="POST" action="#contact" onsubmit="return verifForm(this)">
    <div class="group">
        <?php
                        if(!empty($_POST['email'])) {
                            echo "<input id='contact-email' name='email' type='email' required onblur='verifEmail(this)' value='".$_SESSION['email']."'>";
                        }else {
                            echo "<input id='contact-email' name='email' type='email' required onblur='verifEmail(this)'>";
                        }
                    ?>
        <span class="bar"></span>
        <label>Email</label>
    </div>
    <div class="group">
        <?php
                        if(!empty($_POST['textarea'])) {
                            echo "<textarea name='textarea' id='contact-textarea' cols='30' onblur='verifTextarea(this)' rows='1'>".$_SESSION['textarea']."</textarea>";
                        }else {
                            echo "<textarea name='textarea' id='contact-textarea' cols='30' onblur='verifTextarea(this)' rows='1'></textarea>";
                        }
                    ?>
        <span class="bar"></span>
        <label>Message</label>
    </div>
    <div class="group">
        <span id="erreurjs" class="form-text text-muted"></span><br />
        <input class="contact-btn" type="submit" value="Envoyer">
    </div>
</form>

这是我的 JS:

function verifForm(f) {
    var emailOk = verifEmail(f.email);
    var textareaOk = verifTextarea(f.textarea);

    if (emailOk && textareaOk) {
        return true;
        document.getElementById('contact-message').className('contact-message-true').innerHTML('OK');
    } else {
        return false;
        document.getElementById('contact-message').className('contact-message-false').innerHTML('NOT OK');
    }
}

(其他功能正常)

基本上,此代码建议访问者输入他的电子邮件和消息。如果电子邮件无效,他将无法提交表单,文本区域也是如此(值必须在 2 到 255 之间)。 但是目前,验证电子邮件和文本区域正在工作,但似乎verifForm(f) 不起作用......

PS:对不起,我是法国人!

【问题讨论】:

  • 附注:函数中return 之后没有任何内容。
  • 线路不工作是document.getElementById('contact-message').className('contact-message-true').innerHTML('OK'); 对吗?
  • 在您的 html 中,它们没有 ID 为“contact-message”的元素
  • @Natsathorn 你是对的,它可能不起作用,但它不应该停止脚本,因为它在 return 之后,对吧?

标签: javascript html forms validation


【解决方案1】:

返回是你在函数中做的最后一件事。它会结束你的函数。

所以,return 之后不要放任何东西,因为它什么都不会。

解决您的问题只需交换returndocument.getElementById

试试这个:

function verifForm(f) {
    var emailOk = verifEmail(f.email);
    var textareaOk = verifTextarea(f.textarea);

    if(emailOk && textareaOk){
        document.getElementById('contact-message').className('contact-message-true').innerHTML('OK');
        return true;
    }else{
        document.getElementById('contact-message').className('contact-message-false').innerHTML('NOT OK');
        return false;
    }
}

你也可以这样做

function verifForm(f) {
    var emailOk = verifEmail(f.email);
    var textareaOk = verifTextarea(f.textarea);

    if(emailOk && textareaOk){
        document.getElementById('contact-message').className('contact-message-true').innerHTML('OK');
        return true;
    }

    // two command under this line will not be execute if you condition above is true. Your function will finish there.
    document.getElementById('contact-message').className('contact-message-false').innerHTML('NOT OK');
    return false;
}

仅供参考:在您的 HTML 中没有 ID 为 contact-message 的元素

【讨论】:

    【解决方案2】:

    在您的 JS 代码中,您必须在文档错误函数之后加上 return。像这样

    function verifForm(f) {
        var emailOk = verifEmail(f.email);
        var textareaOk = verifTextarea(f.textarea);
        if (emailOk && textareaOk) {
            document.getElementById('contact-message').className('contact-message-true').innerHTML('OK');
            return true;
        } else {
            document.getElementById('contact-message').className('contact-message-false').innerHTML('NOT OK');
            return false;
        }
    }
    

    【讨论】:

      【解决方案3】:

      谢谢你们,我是个白痴! ^^

      所以我把 return 放在了最后一个地方,我也将我的代码更改为以下代码,现在它工作正常!

      如果它可以帮助其他人,这是我当前的代码:

      HTML:

      <form method="POST" action="#contact" onsubmit="return verifForm(this)">
                      <div class="group">
                      <?php
                          if(!empty($_POST['email'])) {
                              echo "<input id='contact-email' name='email' type='email' required onblur='verifEmail(this)' value='".$_SESSION['email']."'>";
                          }else {
                              echo "<input id='contact-email' name='email' type='email' required onblur='verifEmail(this)'>";
                          }
                      ?>
                          <span class="bar"></span>
                          <label>Email</label>
                      </div>
                      <div class="group">
                      <?php
                          if(!empty($_POST['textarea'])) {
                              echo "<textarea name='textarea' id='contact-textarea' cols='30' onblur='verifTextarea(this)' rows='1'>".$_SESSION['textarea']."</textarea>";
                          }else {
                              echo "<textarea name='textarea' id='contact-textarea' cols='30' onblur='verifTextarea(this)' rows='1'></textarea>";
                          }
                      ?>
                          <span class="bar"></span>
                          <label>Message</label>
                      </div>
                      <div class="group">
                      <?php
                          if(!empty($message)){
                              echo $message;
                              $message = '';
                          }else {
                              echo '<span id="contact-message"></span><br />';
                          }
      
                      ?>
      

      JS:

      function verifForm(f) {
      var emailOk = verifEmail(f.email);
      var textareaOk = verifTextarea(f.textarea);
      
      if(emailOk && textareaOk){
          document.getElementById('contact-message').className = 'contact-message-true';
          document.getElementById('contact-message').innerHTML = 'Votre message a bien été envoyé';
          return true;
      }
      document.getElementById('contact-message').className = 'contact-message-false';
      document.getElementById('contact-message').innerHTML = 'Veuillez remplir tous les champs correctement.';
      return false;
      

      }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-13
        • 1970-01-01
        • 2017-11-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多