Jquery флажок не установлен - PullRequest
       2

Jquery флажок не установлен

0 голосов
/ 04 августа 2020

Мы используем Jquery, и я новичок в этом. У меня есть следующий код HTML и bootstarp. Строки создаются динамически. Здесь я хочу убедиться, что только один флажок установлен одновременно. т.е. флажок должен быть установлен для выбранной строки, и он должен быть снят для остальных строк.

<div id="paymentTable" class="stripeTwoRows eligibilityARPaymentInfoWidth">
   <div class="row mx-0">
      <div class="col-2 px-1">
         <input id="memberARPaymentchkbox1" type="checkbox" name="memberARPaymentchkbox" onclick="resetPaymentDisplay(this);" payment="216001221" class="cursorPtr"><b>&nbsp;&nbsp;</b>216001221
      </div>
      <div class="col-2 px-1">00001</div>
      <div class="col-2 px-1">06/30/2016</div>
      <div class="col-2 px-1"></div>
      <div class="col-2 px-1">N</div>
      <div class="col-2 px-1 d-flex justify-content-end">$350.00-</div>
   </div>
   <div class="row mx-0">
      <div class="col-2 offset-4 px-1">0063016</div>
      <div class="col-2 offset-4 px-1 d-flex justify-content-end">$0.00</div>
   </div>
   <div class="row mx-0">
      <div class="col-2 px-1">
         <input id="memberARPaymentchkbox2" type="checkbox" name="memberARPaymentchkbox" onclick="resetPaymentDisplay(this);" payment="216001222" class="cursorPtr"><b>&nbsp;&nbsp;</b>216001222
      </div>
      <div class="col-2 px-1">00001</div>
      <div class="col-2 px-1">06/30/2016</div>
      <div class="col-2 px-1"></div>
      <div class="col-2 px-1">N</div>
      <div class="col-2 px-1 d-flex justify-content-end">$400.00-</div>
   </div>
   <div class="row mx-0">
      <div class="col-2 offset-4 px-1">0063016</div>
      <div class="col-2 offset-4 px-1 d-flex justify-content-end">$0.00</div>
   </div>
</div>

Я мог бы снять отметку со всех строк, но не смог установить флажок выбранной строки .

Пытался установить флажок со следующим кодом Jquery, но не работает.

$(this).find("input[type=checkbox]").attr("checked", true);

полный код:

function resetPaymentDisplay(element) {
    var iCount = paymentTable.children.length;
    for (var iLoop = 0; iLoop < iCount; iLoop += 2) {

        paymentTable.children[iLoop].children[0].children[0].checked = false;


    }
     $(this).find("input[type=checkbox]").attr("checked", true);
    //$(this).attr("checked", true);


//  $(element).children().eq(0).prop('checked', true);
//  $(this).find("input[type=checkbox]").attr("checked", true);


}

Любая помощь приветствуется.

Ответы [ 4 ]

2 голосов
/ 04 августа 2020

Вы вызываете resetPaymentDisplay(this) для следующего элемента из-за события onClick

<input id="memberARPaymentchkbox2" type="checkbox" name="memberARPaymentchkbox" onclick="resetPaymentDisplay(this);" payment="216001222" class="cursorPtr">

В функции resetPaymentDisplay(this) он упоминается как element в аргументах функции, но вы также используете $(this) снова в некоторых строках.

Если вы передаете сам элемент ввода в функцию, как вы это делаете, потому что this в вашем коде HTML ссылается на ваш элемент ввода, вы должны иметь возможность установить это нужно проверять только с помощью следующей функции

function resetPaymentDisplay(element) {
    element.checked = true;
}

, потому что вы работаете с объектом JavaScript, а не с объектом jQuery.

Для остальных функций, которые Убедившись, что у вас установлен только один из флажков, вы можете использовать jQuery, но это также легко сделать с помощью vanilla JS. Для этого примера давайте go с jQuery, которое вы пытались использовать.

Блок кода удален, потому что он нуждался в исправлении. Пожалуйста, обратитесь к блоку кода ниже.

Примечания:

  • важно различать JavaScript объекты и jQuery обернутые объекты (те, вы получаете результат поиска jQUery, например, $("#something"). Чтобы помочь вам не забыть, какой из объектов, обернутых в оболочку jQuery, обычно добавляется к обернутым объектам знаком доллара, как вы можете видеть в примере $parent и $otherCheckboxes.

  • this ключевое слово всегда относится к чему-то в текущей области ... это довольно сложная концепция для понимания, особенно если мы говорим о JavaScript. this в ваш HTML, $(this) в вашем JS коде, и даже если у вас был простой this в вашем JS коде, все ссылки на разные вещи.

Изменить: Хорошо , если честно, я дал ответ вслепую, без тестирования, и сделал очень похожую ошибку, как и вы. Функция $.each оставляет вам JavaScript объектов в item вместо jQuery тех, которых я не делал » t понять. Окончательный код функции должен выглядеть как th is

function resetPaymentDisplay(element) {
    element.checked = true;

    var $parent = $('#paymentTable');
    var $otherCheckboxes = $parent.find(".cursorPtr");
    $otherCheckboxes.each(function(i, item) {
        if (item.id !== element.id) {
            item.checked = false;
        }
    });
}

Вот пример рабочего скрипта для него: https://jsfiddle.net/g5t3s4uL/

1 голос
/ 04 августа 2020

Вы можете использовать change событие jquery, чтобы отслеживать, когда ваш флажок установлен или снят, а затем мы можем проверить, установлен ли флажок, если true, затем используйте $('input:checkbox').not(this).prop('checked', false);, чтобы снять отметку с других флажков. удалили onclick="resetPaymentDisplay(this); во фрагменте кода ниже.

Демо-код :

//on change of checkbox
$(document).on("change","input[type=checkbox]" ,function() {
//chcking if checkbox is checked
  if ($(this).prop("checked") == true) {
  //unchecked others
    $('input:checkbox').not(this).prop('checked', false);
    console.log("uncheck others")
   
  }

})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="paymentTable" class="stripeTwoRows eligibilityARPaymentInfoWidth">
  <div class="row mx-0">
    <div class="col-2 px-1">
      <input id="memberARPaymentchkbox1" type="checkbox" name="memberARPaymentchkbox" payment="216001221" class="cursorPtr"><b>&nbsp;&nbsp;</b>216001221
    </div>
    <div class="col-2 px-1">00001</div>
    <div class="col-2 px-1">06/30/2016</div>
    <div class="col-2 px-1"></div>
    <div class="col-2 px-1">N</div>
    <div class="col-2 px-1 d-flex justify-content-end">$350.00-</div>
  </div>
  <div class="row mx-0">
    <div class="col-2 offset-4 px-1">0063016</div>
    <div class="col-2 offset-4 px-1 d-flex justify-content-end">$0.00</div>
  </div>
  <div class="row mx-0">
    <div class="col-2 px-1">
      <input id="memberARPaymentchkbox2" type="checkbox" name="memberARPaymentchkbox" payment="216001222" class="cursorPtr"><b>&nbsp;&nbsp;</b>216001222
    </div>
    <div class="col-2 px-1">00001</div>
    <div class="col-2 px-1">06/30/2016</div>
    <div class="col-2 px-1"></div>
    <div class="col-2 px-1">N</div>
    <div class="col-2 px-1 d-flex justify-content-end">$400.00-</div>
  </div>
  <div class="row mx-0">
    <div class="col-2 offset-4 px-1">0063016</div>
    <div class="col-2 offset-4 px-1 d-flex justify-content-end">$0.00</div>
  </div>
</div>
1 голос
/ 04 августа 2020

Для этого можно использовать приведенный ниже код:

$('#paymentTable input[type=checkbox]').change(function() {
  $('#paymentTable input[type=checkbox]').prop("checked", false);
  $(this).prop("checked", true);
});
0 голосов
/ 04 августа 2020

Попробуйте:

$(this).find("input[type=checkbox]").prop("checked", true);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...