【问题标题】:jQuery/JS/PHP - Disable Form and Submit button only after submitjQuery/JS/PHP - 仅在提交后禁用表单和提交按钮
【发布时间】:2016-03-17 22:33:46
【问题描述】:

我有一个表单,我想在提交后禁用提交按钮和表单本身。表单当前提交给自己,到目前为止我尝试过的所有解决方案要么禁用表单并提交按钮,但从未提交过表单,或者提交了表单但未禁用按钮/表单。

PHP:

<?php

if(isset($_POST['send'])){

if(!isset($_SESSION)) 
    { 
        session_start();
        session_regenerate_id();
    }
if($_SESSION['user_login_status']==false)
{header('Location:../index.php');}

$Firstname = $_POST["firstname"];
$Lastname = $_POST["lastname"];
$EmpID = $_POST["employeeid"];
$Ticket = $_POST["ticket"];
$Office = $_POST["office"];
$Division = $_POST["division"];
$Device = $_POST["device"];
$Secure = $_POST["secure"];
$Zendesk = $_POST["zendesk"];
$Agent = $_SESSION['user'];

$psPath = 'c:\\Windows\\System32\WindowsPowerShell\v1.0\\powershell.exe -version 5';
$psDIR = "d:\\wamp64\\www\\includes\\";
$psScript = "NewHire.ps1";
$runCMD = $psPath. ' -ExecutionPolicy RemoteSigned '.$psDIR.$psScript.' -Firstname ' .$Firstname. ' -Lastname '.$Lastname. ' -EmpID ' .$EmpID. ' -Ticket ' .$Ticket. ' -Office ' .$Office. ' -Division ' .$Division. ' -Device ' .$Device. ' -Secure ' .$Secure. ' -Zendesk ' .$Zendesk. ' -Agent ' .$Agent;

$createuser = exec($runCMD, $out);

}
?>

精简 HTML:

      <form class="rnd5" method="post" id="frm">
        <div class="form-input clear">
        <label class="one_third" for="firstname">Firstname <span class="required"><font color="red">*</font></span>
            <input type="text" name="firstname" id="firstname" autofocus required>
        </label>
        </div>

    <!-- ################################################################################################ -->   
        <div class="form-input clear">
        <label class="one_third" for="lastname">Lastname <span class="required"><font color="red">*</font></span>
            <input type="text" name="lastname" id="lastname" required>
        </label>
        </div>


        <p>
          <input type="submit" name="send" value="Submit">
          &nbsp;
          <input type="reset" value="Reset">
        </p>
      </form>
    </div>
    <!-- ################################################################################################ -->
    <div class="clear"></div>
  </div>
</div>

<!-- Footer -->
<?php include('../footer.php'); ?>
</body>
</html>

我尝试了不同的功能,例如:

          $(function () {
              $(".send").click(function () {
                  $(".send").attr("disabled", true);
                  $('#frm').submit();
              });
          });

$('input:submit').click(function(){
    $('input:submit').attr("disabled", true);   
});

到目前为止似乎没有任何效果。有人有想法吗?

【问题讨论】:

    标签: javascript php jquery html forms


    【解决方案1】:

    我可以看到您的代码存在两个基本问题。首先是你的 jQuery 选择器。

    在第一个函数中:. 选择器(如在 $(".send") 中适用于 class 属性,而不是 name 属性。我建议您将输入更改为 class = send 或将选择器更改为 @ 987654326@.

    在第二个函数中。我很确定 $('input:submit') 不是一个有效的选择器,我不确定它是什么意思。

    查看:http://www.w3schools.com/jquery/jquery_ref_selectors.asp

    第二个问题是您正在提交表单并因此触发页面重新加载。如果您想禁用表单按钮,我认为这不是所需的行为?在这种情况下,您应该禁用按钮的默认行为(有很多方法可以做到这一点:Stop form refreshing page on submit)并自己将数据发布到服务器。

    这会给您留下如下内容:

          $(function () {
              $("[name='send']").click(function () {
                  $(this).attr("disabled", true);
                  $("#frm").submit();
              });
    
              $("#frm").on("submit",function() {
                 $.post("http://example.com/your_php_file.php",$(this).serialize());
                 $(this).preventDefault();
              });  
          });
    

    我自己无法测试这个,因为我没有太多时间也没有一个方便的网络服务器,但这应该会给你一个好的开始。

    【讨论】:

    • 感谢克里斯的信息。我会看看这些信息。