簡體   English   中英

無法制作雙向按鈕(第一次單擊使問題在第二次啟用時禁用)

[英]Not able to make two way button (On first click make question disable in 2nd make enable )

我已經為 NA 按鈕編寫了一個代碼,它在單擊后禁用問題。但是如果用戶錯誤地單擊它,我無法在第二次單擊后啟用它。

下面是按鈕的代碼。

 $(".btn-na").click(function() {
    let n = $('.answers.disabled').length
    if (n >= 3) {
      alert('You can only disable 3');
      return
    }
    $(this).closest('.answers').find("input").attr('disabled', true);
    $(this).closest('.answers').addClass('disabled')
  })
});

以上是我為此編寫的 Jquery。

JS:-

    $(document).ready(function() {
  let ctr = 1;
  $('.answers').each(function(index) {
    let i = index + 1
    let html = ` <div class="form-check-inline section-1">
    <input class="form-check-input" type="radio" name="question${i}" id="gridRadios${ctr}" value="1">
    <label class="form-check-label" for="gridRadios${ctr}"> Never</label>
    </div>
    <div class="form-check-inline section-1">
    <input class="form-check-input" type="radio" name="question${i}" id="gridRadios${ctr}" value="2">
    <label class="form-check-label" for="gridRadios${ctr}">Rarely</label>
    </div>
    <div class="form-check-inline section-1">
    <input class="form-check-input" type="radio" name="question${i}" id="gridRadios${ctr}" value="3">
    <label class="form-check-label" for="gridRadios${ctr}">Occasionally</label>
    </div>
    <div class="form-check-inline section-1">
    <input class="form-check-input" type="radio" name="question${i}" id="gridRadios${ctr}" value="4">
    <label class="form-check-label" for="gridRadios${ctr}">Often</label>
    </div>
    <div class="form-check-inline section-1">
    <input class="form-check-input" type="radio" name="question${i}" id="gridRadios${ctr}" value="5">
    <label class="form-check-label" for="gridRadios${ctr}">Always</label>
    </div>

    <div class="form-group">
    <input type="button" name="q${i}Remark" value="Remark" onclick="onButtonClick(${i})" />
    <input class="hide" type="text" id="textInput${i}" value="" oninput="updateTextBox()" />
    <p>Remaining Characters: <span id="chars-left">100</span></p>
    </div>
    <div class="form-group">
    <button name="disable${i}" id="na${i}" class='btn-na'>N/A</button>
    </div>
    `
    $(this).html(html);
    ctr++;
  })




  $(".btn-na").click(function() {
    let n = $('.answers.disabled').length
    if (n >= 3) {
      alert('You can only disable 3');
      return
    }
    $(this).closest('.answers').find("input").attr('disabled', true);
    $(this).closest('.answers').addClass('disabled')
  })
});

$('.btnNextS1').click(function() {
  if ($('div.row1:not(:has(:radio:checked))').length) {
    $('div.row1:not(:has(:radio:checked))').parent().after("<div class='validation' style='color:red;margin-bottom: 20px;'>Please Answer this question</div>");
  } else {
    // e.stopPropagation();
    $('ul.nav-tabs li.nav-item     a.active').closest('li').next('li').find('a').trigger('click');
  }
});

HTML:-

    <div class="section-1-questions">
  <div style="background-color:greenyellow;"> <b>Section 1:</b> </div><br>
  <fieldset class="form-group">
    <div class="row1">
      <div class="question1">
        <legend id="q1" class="col-form-label col-sm-8 pt-0"><b>1) Question 1</b></legend>
        <div class="col-sm-10 answers">
        </div>
      </div>
    </div>
  </fieldset>
  <fieldset class="form-group">
    <div class="row1">
      <legend id="q2" class="col-form-label col-sm-8 pt-3"><b>2) Question 2</b></legend>
      <div class="col-sm-10 answers">
      </div>
    </div>
  </fieldset>
  <fieldset class="form-group">
    <div class="row1">
      <legend id="q3" class="col-form-label col-sm-8 pt-3"><b>3) Question 3</b></legend>
      <div class="col-sm-10 answers">
      </div>
    </div>
  </fieldset>
  <fieldset class="form-group">
    <div class="row1">
      <legend id="q4" class="col-form-label col-sm-8 pt-3"><b>4) Question 4</b></legend>
      <div class="col-sm-10 answers">
      </div>
    </div>
  </fieldset>
  <fieldset class="form-group">
    <div class="row1">
      <legend id="q5" class="col-form-label col-sm-8 pt-3"><b>5) QUESTION 5</b></legend>
      <div class="col-sm-10 answers">
      </div>
    </div>
  </fieldset>
  <div class="form-group">
    <label for="remarks"><b>Remarks / Observations </b></label>
    <input type="name" class="form-control" name="Remarks1" id="remarks1" aria-describedby="nameHelp" placeholder="Please enter your Remarks / Observations">
    <small id="nameHelp" class="form-text text-muted">Please enter your Remarks / Observations about these questions.</small>
  </div>
</div>
<br>
<a class="btn btn-primary btnPrevious">Previous</a>
<a class="btn btn-primary btnNextS1">Next</a>
</div> 

我會改變兩件事情來解決這個問題。

1: $('.answers.disabled').not($(this).closest('.answers')).length

^這會計算所有已禁用的.answers ,但不包括您單擊的那個。 這將確保我們可以在輸入被禁用時啟用它。

2: $(this).closest('.answers').find("input").attr('disabled', .$(this).closest('.answers').find("input"):is(";disabled")). $(this).closest('.answers').toggleClass('disabled') $(this).closest('.answers').find("input").attr('disabled', .$(this).closest('.answers').find("input"):is(";disabled")). $(this).closest('.answers').toggleClass('disabled')

^這將根據是否禁用或ntoe在禁用和啟用之間切換。

結果

  $(".btn-na").click(function() {
    let n = $('.answers.disabled').not($(this).closest('.answers')).length
    if (n >= 3) {
      alert('You can only disable 3');
      return
    }
    $(this).closest('.answers').find("input").attr('disabled', !$(this).closest('.answers').find("input").is(":disabled"));
    $(this).closest('.answers').toggleClass('disabled')
  })

演示

 $(document).ready(function() { let ctr = 1; $('.answers').each(function(index) { let i = index + 1 let html = `<div class="form-check-inline section-1"> <input class="form-check-input" type="radio" name="question${i}" id="gridRadios${ctr}" value="1"> <label class="form-check-label" for="gridRadios${ctr}"> Never</label> </div> <div class="form-check-inline section-1"> <input class="form-check-input" type="radio" name="question${i}" id="gridRadios${ctr}" value="2"> <label class="form-check-label" for="gridRadios${ctr}">Rarely</label> </div> <div class="form-check-inline section-1"> <input class="form-check-input" type="radio" name="question${i}" id="gridRadios${ctr}" value="3"> <label class="form-check-label" for="gridRadios${ctr}">Occasionally</label> </div> <div class="form-check-inline section-1"> <input class="form-check-input" type="radio" name="question${i}" id="gridRadios${ctr}" value="4"> <label class="form-check-label" for="gridRadios${ctr}">Often</label> </div> <div class="form-check-inline section-1"> <input class="form-check-input" type="radio" name="question${i}" id="gridRadios${ctr}" value="5"> <label class="form-check-label" for="gridRadios${ctr}">Always</label> </div> <div class="form-group"> <input type="button" name="q${i}Remark" value="Remark" onclick="onButtonClick(${i})" /> <input class="hide" type="text" id="textInput${i}" value="" oninput="updateTextBox()" /> <p>Remaining Characters: <span id="chars-left">100</span></p> </div> <div class="form-group"> <button name="disable${i}" id="na${i}" class='btn-na'>N/A</button> </div>` $(this).html(html); ctr++; }) $(".btn-na").click(function() { let n = $('.answers.disabled').not($(this).closest('.answers')).length if (n >= 3) { alert('You can only disable 3'); return } $(this).closest('.answers').find("input").attr('disabled', .$(this).closest('.answers').find("input"):is(";disabled")). $(this).closest('.answers').toggleClass('disabled') }) $('.btnNextS1').click(function() { $("div.row1").each(function() { $(this).parent().next(".validation").remove() if ($(this):has("input.checked").length > 0) {} else { $(this).parent():after("<div class='validation' style='color;red:margin-bottom; 20px;'>Please Answer this question</div>"). } }) if ($("div.row1").filter(function() { return $(this).parent().next().hasClass("validation") }).length == 0) { //e;stopPropagation(). console;log('valid'). $('ul.nav-tabs li.nav-item a.active').closest('li').next('li').find('a');trigger('click'); } }); });
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="section-1-questions"> <div style="background-color:greenyellow;"> <b>Section 1:</b> </div><br> <fieldset class="form-group"> <div class="row1"> <div class="question1"> <legend id="q1" class="col-form-label col-sm-8 pt-0"><b>1) Question 1</b></legend> <div class="col-sm-10 answers"> </div> </div> </div> </fieldset> <fieldset class="form-group"> <div class="row1"> <legend id="q2" class="col-form-label col-sm-8 pt-3"><b>2) Question 2</b></legend> <div class="col-sm-10 answers"> </div> </div> </fieldset> <fieldset class="form-group"> <div class="row1"> <legend id="q3" class="col-form-label col-sm-8 pt-3"><b>3) Question 3</b></legend> <div class="col-sm-10 answers"> </div> </div> </fieldset> <fieldset class="form-group"> <div class="row1"> <legend id="q4" class="col-form-label col-sm-8 pt-3"><b>4) Question 4</b></legend> <div class="col-sm-10 answers"> </div> </div> </fieldset> <fieldset class="form-group"> <div class="row1"> <legend id="q5" class="col-form-label col-sm-8 pt-3"><b>5) QUESTION 5</b></legend> <div class="col-sm-10 answers"> </div> </div> </fieldset> <div class="form-group"> <label for="remarks"><b>Remarks / Observations </b></label> <input type="name" class="form-control" name="Remarks1" id="remarks1" aria-describedby="nameHelp" placeholder="Please enter your Remarks / Observations"> <small id="nameHelp" class="form-text text-muted">Please enter your Remarks / Observations about these questions.</small> </div> </div> <br> <a class="btn btn-primary btnPrevious">Previous</a> <a class="btn btn-primary btnNextS1">Next</a> </div>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM