在提交和保留时禁用表单字段

时间:2018-01-21 02:39:28

标签: javascript jquery html forms handlebars.js

我的期望

我有一个类competitionformsubmit的表单,我想要它,所以一旦用户填写此表单,字段将获得属性disabled并且提交按钮被隐藏,此提交仍然存在,所以应该用户刷新或返回此表单时,表单字段被禁用,并且不显示提交按钮。

到目前为止,这是javascript。

$('.competitionformsubmit').on('submit',function(e){
  $(this).find("input").attr('disabled', 'disabled');
  $(this).find("input[type=submit]").addClass('hidden');
});

编辑1

这是我的HTML

{{> header}}

<div class="container">
  <form action="/dashboard/users/forms/competition-form/{{user.id}}" method="post" class="competitionformsubmit">
    <h2>School Competition Form</h2>
        <p>
            <b>All fields with <span style="color: red">*</span> are required</b>
        </p>

    <div class="panel panel-default">
      <div class="panel-heading">
        General Information
      </div>

      <div class="panel-body">
        <div class="row">
          <div class="form-group col-md-12">
            <label for="schoolName">
              School Name <span style="color: red">*</span>
            </label>
            <input type="text" class="form-control" name="schoolName" placeholder="Enter school name" value="{{competitions.schoolName}}" required>
          </div>

          <div class="form-group col-md-6 date" data-provide="datepicker">
            <label for="competitionDate">
              Competition Date <span style="color: red">*</span>
            </label>
            <input type="text" class="form-control" id="competitionDate" name="competitionDate" placeholder="Enter the date of competition" value="{{competitions.competitionDate}}" required>
          </div>

          <div class="form-group col-md-6">
            <label for="competitionTime">
              Time <span style="color: red">*</span>
            </label>
            <input type="text" class="form-control" id="competitionTime" name="competitionTime" placeholder="Enter the time of the competition (e.g. 8:00 AM)" value="{{competitions.competitionTime}}" required>
          </div>

          <div class="form-group col-md-12">
            <label for="competitionVenue">
              Venue <span style="color: red">*</span>
            </label>
            <input type="text" class="form-control" id="competitionVenue" name="competitionVenue" placeholder="Enter where the competition was held" value="{{competitions.competitionVenue}}" required>
          </div>

          <div class="form-group col-md-6">
            <label for="competitionTotalOfStudents">
              Total number of students in the program <span style="color: red">*</span>
            </label>
            <input type="text" class="form-control" id="competitionTotalOfStudents" name="competitionTotalOfStudents" placeholder="Enter the total number" value="{{competitions.competitionTotalOfStudents}}" required>
          </div>

          <div class="form-group col-md-6">
            <label for="competitionTotalParticipated">
              Total number of students that participated <span style="color: red">*</span>
            </label>
            <input type="text" class="form-control" id="competitionTotalParticipated" name="competitionTotalParticipated" placeholder="Enter the total number" value="{{competitions.competitionTotalParticipated}}" required>
          </div>

          <div class="form-group col-md-6">
            <label for="competitionTotalPersonnel">
              Total number of school personnel involved in the program <span style="color: red">*</span>
            </label>
            <input type="text" class="form-control" id="competitionTotalPersonnel" name="competitionTotalPersonnel" placeholder="Enter the total number" value="{{competitions.competitionTotalPersonnel}}" required>
          </div>
        </div><!-- row ends -->
      </div><!-- End of panel body -->
    </div><!-- School Information panel ends -->

    <!-- Judge 1 Info -->
    <div class="panel panel-default">
      <div class="panel-heading">
        Judge 1
      </div>

      <div class="panel-body">
        <div class="row">
          <div class="form-group col-md-12">
            <label for="competitionJudge1Name">
              Judge's Name <span style="color: red">*</span>
            </label>
            <input type="text" class="form-control" id="competitionJudge1Name" name="competitionJudge1Name" placeholder="Enter the Judge's Name" value="{{competitions.competitionJudge1Name}}" required>
          </div>

          <div class="form-group col-md-6">
            <label for="competitionJudge1Telephone">
              Telephone <span style="color: red">*</span>
            </label>
            <input type="text" class="form-control" id="competitionJudge1Telephone" name="competitionJudge1Telephone" placeholder="Enter the Judge's Telephone Number" value="{{competitions.competitionJudge1Telephone}}" required>
          </div>

          <div class="form-group col-md-6">
            <label for="competitionJudge1Email">
              Email address <span style="color: red">*</span>
            </label>
            <input type="email" class="form-control" id="competitionJudge1Email" name="competitionJudge1Email" placeholder="judge@example.com" value="{{competitions.competitionJudge1Email}}" required>
          </div>
        </div>
      </div><!-- end of row -->
    </div>

    <!-- Judge 2 Info -->
    <div class="panel panel-default">
      <div class="panel-heading">
        Judge 2
      </div>

      <div class="panel-body">
        <div class="row">
          <div class="form-group col-md-12">
            <label for="competitionJudge2Name">
              Judge's Name <span style="color: red">*</span>
            </label>
            <input type="text" class="form-control" id="competitionJudge2Name" name="competitionJudge2Name" placeholder="Enter the Judge's Name" value="{{competitions.competitionJudge2Name}}" required>
          </div>

          <div class="form-group col-md-6">
            <label for="competitionJudge2Telephone">
              Telephone <span style="color: red">*</span>
            </label>
            <input type="text" class="form-control" id="competitionJudge2Telephone" name="competitionJudge2Telephone" placeholder="Enter the Judge's Telephone Number" value="{{competitions.competitionJudge2Telephone}}" required>
          </div>

          <div class="form-group col-md-6">
            <label for="competitionJudge2Email">
              Email address <span style="color: red">*</span>
            </label>
            <input type="email" class="form-control" id="competitionJudge2Email" name="competitionJudge2Email" placeholder="judge@example.com" value="{{competitions.competitionJudge2Email}}" required>
          </div>
        </div>
      </div><!-- end of row -->
    </div>

    <!-- Judge 3 Info -->
    <div class="panel panel-default">
      <div class="panel-heading">
        Judge 3
      </div>

      <div class="panel-body">
        <div class="row">
          <div class="form-group col-md-12">
            <label for="competitionJudge3Name">
              Judge's Name <span style="color: red">*</span>
            </label>
            <input type="text" class="form-control" id="competitionJudge3Name" name="competitionJudge3Name" placeholder="Enter the Judge's Name" value="{{competitions.competitionJudge3Name}}" required>
          </div>

          <div class="form-group col-md-6">
            <label for="competitionJudge3Telephone">
              Telephone <span style="color: red">*</span>
            </label>
            <input type="text" class="form-control" id="competitionJudge3Telephone" name="competitionJudge3Telephone" placeholder="Enter the Judge's Telephone Number" value="{{competitions.competitionJudge3Telephone}}" required>
          </div>

          <div class="form-group col-md-6">
            <label for="competitionJudge3Email">
              Email address <span style="color: red">*</span>
            </label>
            <input type="email" class="form-control" id="competitionJudge3Email" name="competitionJudge3Email" placeholder="judge@example.com" value="{{competitions.competitionJudge3Email}}" required>
          </div>
        </div>
      </div><!-- end of row -->
    </div>

    <!-- The following fields are hidden to users and should ONLY be visible and editable by a site admin-level user. -->
    {{#if user.admin}}
    <div class="panel panel-danger">
      <div class="panel-heading">
        Administrators Only
      </div>

      <div class="panel-body">
        <p>Sent Required Photos?</p>
        <div class="form-check">
          <input class="form-check-input" type="radio" name="competitionRequiredPhotos" id="yesPhotosRadio" value="yes">
          <label class="form-check-label" for="yesPhotosRadio">Yes</label>
        </div>
        <div class="form-check">
          <input class="form-check-input" type="radio" name="competitionRequiredPhotos" id="noPhotosRadio" value="no">
          <label class="form-check-label" for="noPhotosRadio">No</label>
        </div>

        <p>Sent Required Certifications?</p>
        <div class="form-check">
          <input class="form-check-input" type="radio" name="competitionRequiredCertifications" id="yesCertsRadio" value="yes">
          <label class="form-check-label" for="yesCertsRadio">Yes</label>
        </div>
        <div class="form-check">
          <input class="form-check-input" type="radio" name="competitionRequiredCertifications" id="noCertsRadio" value="no">
          <label class="form-check-label" for="noCertsRadio">No</label>
        </div>
      </div>
    </div>
    {{/if}}
    <!-- End of fields hidden to user -->
    <button type="submit" class="btn btn-primary">Confirm</button>
  </form>
</div>

{{> footer}}

3 个答案:

答案 0 :(得分:0)

如果我理解正确,您希望阻止用户多次提交表单,即使在离开并返回后也是如此。

您提交的数据(通常存储在某种数据库中)需要某种标记,以表明该表单已由该特定用户提交。

假设您没有此类数据库存储,可以使用precedence在本地持久保存此标记

$('.competitionformsubmit').on('submit',function(e){
     sessionStorage.setItem('form-submitted', true);
     // disable your inputs
});

当页面加载时

$(document).ready(function(){
  // Check for the flag 
  var flag = sessionStorage.getItem('form-submitted');
  if(flag === true) {
    // disable your inputs & button
  } 
});

答案 1 :(得分:0)

按照您的描述,您应该使用AJAX提交表单。你的JS代码不是AJAX表单帖子,它会触发页面刷新。页面刷新后,表单状态将被重置,JS逻辑将恢复到原始状态。因此,您应该添加一些AJAX逻辑以避免正常的表单发布。例如:

$('.competitionformsubmit').on('submit',function(e){
    $(this).find("input").attr('disabled', 'disabled');
    $(this).find("input[type=submit]").addClass('hidden');
    // Here: Your ajax form post codes.
    // return false will stop the normal form post and avoid the page refresh.
    return false;
});

FYI。

答案 2 :(得分:0)

试试这段代码。我已经添加了两种不同的方法,你也可以完成这项工作。检查脚本中的注释。

&#13;
&#13;
$(document).ready(function() {

  $(".competitionformsubmit").submit(function(e) {

    //stop submitting the form to see the disabled button effect
    e.preventDefault();

    //disable the submit button by refering input element ID
    $("#btnSubmit").attr("hidden", true);

    //disable the input text fields by refering through form class and type of the input
    $('.competitionformsubmit input[type=text]').attr("disabled", true);

    return true;

  });
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form class="competitionformsubmit" action="#" method="POST">
  First name:<br>
  <input type="text" name="firstname">
  <br> Last name:<br>
  <input type="text" name="lastname">
  <br><br>
  <input type="submit" id="btnSubmit" value="Submit">
</form>
&#13;
&#13;
&#13;

编辑1

&#13;
&#13;
$(document).ready(function() {

  $(".competitionformsubmit").submit(function(e) {

    //stop submitting the form to see the disabled button effect
    e.preventDefault();

    //disable the submit button by refering input element ID
    $("#btnSubmit").attr("hidden", true);

    //disable the input text fields by refering through form class and type of the input
    $('.competitionformsubmit input[type=text]').attr("disabled", true);

    $('.competitionformsubmit input[type=email]').attr("disabled", true);

    $('.competitionformsubmit input[type=radio]').attr("disabled", true);


    return true;

  });
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


{{> header}}

<div class="container">
  <form action="/dashboard/users/forms/competition-form/{{user.id}}" method="post" class="competitionformsubmit">
    <h2>School Competition Form</h2>
    <p>
      <b>All fields with <span style="color: red">*</span> are required</b>
    </p>

    <div class="panel panel-default">
      <div class="panel-heading">
        General Information
      </div>

      <div class="panel-body">
        <div class="row">
          <div class="form-group col-md-12">
            <label for="schoolName">
              School Name <span style="color: red">*</span>
            </label>
            <input type="text" class="form-control" name="schoolName" placeholder="Enter school name" value="{{competitions.schoolName}}" required>
          </div>

          <div class="form-group col-md-6 date" data-provide="datepicker">
            <label for="competitionDate">
              Competition Date <span style="color: red">*</span>
            </label>
            <input type="text" class="form-control" id="competitionDate" name="competitionDate" placeholder="Enter the date of competition" value="{{competitions.competitionDate}}" required>
          </div>

          <div class="form-group col-md-6">
            <label for="competitionTime">
              Time <span style="color: red">*</span>
            </label>
            <input type="text" class="form-control" id="competitionTime" name="competitionTime" placeholder="Enter the time of the competition (e.g. 8:00 AM)" value="{{competitions.competitionTime}}" required>
          </div>

          <div class="form-group col-md-12">
            <label for="competitionVenue">
              Venue <span style="color: red">*</span>
            </label>
            <input type="text" class="form-control" id="competitionVenue" name="competitionVenue" placeholder="Enter where the competition was held" value="{{competitions.competitionVenue}}" required>
          </div>

          <div class="form-group col-md-6">
            <label for="competitionTotalOfStudents">
              Total number of students in the program <span style="color: red">*</span>
            </label>
            <input type="text" class="form-control" id="competitionTotalOfStudents" name="competitionTotalOfStudents" placeholder="Enter the total number" value="{{competitions.competitionTotalOfStudents}}" required>
          </div>

          <div class="form-group col-md-6">
            <label for="competitionTotalParticipated">
              Total number of students that participated <span style="color: red">*</span>
            </label>
            <input type="text" class="form-control" id="competitionTotalParticipated" name="competitionTotalParticipated" placeholder="Enter the total number" value="{{competitions.competitionTotalParticipated}}" required>
          </div>

          <div class="form-group col-md-6">
            <label for="competitionTotalPersonnel">
              Total number of school personnel involved in the program <span style="color: red">*</span>
            </label>
            <input type="text" class="form-control" id="competitionTotalPersonnel" name="competitionTotalPersonnel" placeholder="Enter the total number" value="{{competitions.competitionTotalPersonnel}}" required>
          </div>
        </div>
        <!-- row ends -->
      </div>
      <!-- End of panel body -->
    </div>
    <!-- School Information panel ends -->

    <!-- Judge 1 Info -->
    <div class="panel panel-default">
      <div class="panel-heading">
        Judge 1
      </div>

      <div class="panel-body">
        <div class="row">
          <div class="form-group col-md-12">
            <label for="competitionJudge1Name">
              Judge's Name <span style="color: red">*</span>
            </label>
            <input type="text" class="form-control" id="competitionJudge1Name" name="competitionJudge1Name" placeholder="Enter the Judge's Name" value="{{competitions.competitionJudge1Name}}" required>
          </div>

          <div class="form-group col-md-6">
            <label for="competitionJudge1Telephone">
              Telephone <span style="color: red">*</span>
            </label>
            <input type="text" class="form-control" id="competitionJudge1Telephone" name="competitionJudge1Telephone" placeholder="Enter the Judge's Telephone Number" value="{{competitions.competitionJudge1Telephone}}" required>
          </div>

          <div class="form-group col-md-6">
            <label for="competitionJudge1Email">
              Email address <span style="color: red">*</span>
            </label>
            <input type="email" class="form-control" id="competitionJudge1Email" name="competitionJudge1Email" placeholder="judge@example.com" value="{{competitions.competitionJudge1Email}}" required>
          </div>
        </div>
      </div>
      <!-- end of row -->
    </div>

    <!-- Judge 2 Info -->
    <div class="panel panel-default">
      <div class="panel-heading">
        Judge 2
      </div>

      <div class="panel-body">
        <div class="row">
          <div class="form-group col-md-12">
            <label for="competitionJudge2Name">
              Judge's Name <span style="color: red">*</span>
            </label>
            <input type="text" class="form-control" id="competitionJudge2Name" name="competitionJudge2Name" placeholder="Enter the Judge's Name" value="{{competitions.competitionJudge2Name}}" required>
          </div>

          <div class="form-group col-md-6">
            <label for="competitionJudge2Telephone">
              Telephone <span style="color: red">*</span>
            </label>
            <input type="text" class="form-control" id="competitionJudge2Telephone" name="competitionJudge2Telephone" placeholder="Enter the Judge's Telephone Number" value="{{competitions.competitionJudge2Telephone}}" required>
          </div>

          <div class="form-group col-md-6">
            <label for="competitionJudge2Email">
              Email address <span style="color: red">*</span>
            </label>
            <input type="email" class="form-control" id="competitionJudge2Email" name="competitionJudge2Email" placeholder="judge@example.com" value="{{competitions.competitionJudge2Email}}" required>
          </div>
        </div>
      </div>
      <!-- end of row -->
    </div>

    <!-- Judge 3 Info -->
    <div class="panel panel-default">
      <div class="panel-heading">
        Judge 3
      </div>

      <div class="panel-body">
        <div class="row">
          <div class="form-group col-md-12">
            <label for="competitionJudge3Name">
              Judge's Name <span style="color: red">*</span>
            </label>
            <input type="text" class="form-control" id="competitionJudge3Name" name="competitionJudge3Name" placeholder="Enter the Judge's Name" value="{{competitions.competitionJudge3Name}}" required>
          </div>

          <div class="form-group col-md-6">
            <label for="competitionJudge3Telephone">
              Telephone <span style="color: red">*</span>
            </label>
            <input type="text" class="form-control" id="competitionJudge3Telephone" name="competitionJudge3Telephone" placeholder="Enter the Judge's Telephone Number" value="{{competitions.competitionJudge3Telephone}}" required>
          </div>

          <div class="form-group col-md-6">
            <label for="competitionJudge3Email">
              Email address <span style="color: red">*</span>
            </label>
            <input type="email" class="form-control" id="competitionJudge3Email" name="competitionJudge3Email" placeholder="judge@example.com" value="{{competitions.competitionJudge3Email}}" required>
          </div>
        </div>
      </div>
      <!-- end of row -->
    </div>

    <!-- The following fields are hidden to users and should ONLY be visible and editable by a site admin-level user. -->
    {{#if user.admin}}
    <div class="panel panel-danger">
      <div class="panel-heading">
        Administrators Only
      </div>

      <div class="panel-body">
        <p>Sent Required Photos?</p>
        <div class="form-check">
          <input class="form-check-input" type="radio" name="competitionRequiredPhotos" id="yesPhotosRadio" value="yes">
          <label class="form-check-label" for="yesPhotosRadio">Yes</label>
        </div>
        <div class="form-check">
          <input class="form-check-input" type="radio" name="competitionRequiredPhotos" id="noPhotosRadio" value="no">
          <label class="form-check-label" for="noPhotosRadio">No</label>
        </div>

        <p>Sent Required Certifications?</p>
        <div class="form-check">
          <input class="form-check-input" type="radio" name="competitionRequiredCertifications" id="yesCertsRadio" value="yes">
          <label class="form-check-label" for="yesCertsRadio">Yes</label>
        </div>
        <div class="form-check">
          <input class="form-check-input" type="radio" name="competitionRequiredCertifications" id="noCertsRadio" value="no">
          <label class="form-check-label" for="noCertsRadio">No</label>
        </div>
      </div>
    </div>
    {{/if}}
    <!-- End of fields hidden to user -->
    <button type="submit" id="btnSubmit" class="btn btn-primary">Confirm</button>
  </form>
</div>

{{> footer}}
&#13;
&#13;
&#13;