Динамическое добавление идентификатора в js / jquery - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть форма, которую я беру на входе, и я использую скрипт, чтобы скопировать мою форму при нажатии кнопки добавления. В моей форме есть радио-кнопка, которая содержит скрытую текстовую область. Всякий раз, когда я выбираю value="uygunDegil", это текстовое поле меняется на видимое. Проблема в том, что, когда я добавляю свою форму для копирования, я не смогу получить доступ к своему радиокнопке с моей функцией, скажем, я выбрал value="uygunDegil" в поле 5-й копии, моя первая скрытая текстовая область становится видимой, а не 5-й. Мне нужно добавить какой-то идентификатор и итерировать его в моей форме динамически или в радиокнопке, но я не знаю, как это сделать. Я новичок в JS, поэтому любая помощь или совет будут оценены.

Форма. php

<form method="post">
<div class="form-group row">
  <div class="col-auto">
    <label for="ad">Ad</label>
    <input type="text" name="ad[]" class="form-control" id="ad" placeholder="Öğrencinin Adı"/>
    <label for="soyad">Soyad</label>
    <input type="text" name="soyad[]" class="form-control" id="soyad" placeholder="Öğrencinin Soyadı"/>
    <label for="no">No</label>
    <input type="text" name="numara[]" class="form-control" id="no" placeholder="Öğrencinin Numarası">
    <label for="course">Bölümü</label>
    <input type="text" name="bolum[]" class="form-control" id="course" placeholder="Öğrencinin Bölümü">
    <label for="alKredi">Almak İstediği Kredi</label>
    <input type="text" name="alKredi[]" class="form-control" id="alKredi" placeholder="Almak İstediği Kredi">
    <label for="verKredi">Alabileceği Kredi</label>
    <input type="text" name="verKredi[]" class="form-control" id="verKredi" placeholder="Alabileceği Kredi">
    <label for="evetKontrol">Evet</label>
    <input type="radio" id="evetKontrol" name="uygun" onclick="javascript:yesnoCheck();" value="uygun" checked>
    <label for="hayirKontrol">Hayır</label>
    <input type="radio" id="hayirKontrol" name="uygun" onclick="javascript:yesnoCheck();" value="uygunDegil">
    <div id="ifNo" style="visibility:hidden">
        <strong>Uygun Olmama Sebebi:</strong> <input type="textarea" id="hayirSebep" name="hayirSebep" style="height: 75px"><br>
    </div>
      <div class="input-group-addon">
          <a href="javascript:void(0)" class="btn btn-success addMore"><span class="glyphicon glyphicon glyphicon-plus" aria-hidden="true"></span> Add</a>
      </div>
  </div>
</div>
<input type="submit" name="submit" class="btn btn-primary" value="SUBMIT"/>
</form>

копия моей формы что я добавляю

   <div class="form-group rowCopy" style="display: none;">
    <div class="col-auto">
      <label for="ad">Ad</label>
      <input type="text" name="ad[]" class="form-control" id="ad" placeholder="Öğrencinin Adı"/>
      <label for="soyad">Soyad</label>
      <input type="text" name="soyad[]" class="form-control" id="soyad" placeholder="Öğrencinin Soyadı"/>
      <label for="no">No</label>
      <input type="text" name="numara[]" class="form-control" id="no" placeholder="Öğrencinin Numarası">
      <label for="course">Bölümü</label>
      <input type="text" name="bolum[]" class="form-control" id="course" placeholder="Öğrencinin Bölümü">
      <label for="alKredi">Almak İstediği Kredi</label>
      <input type="text" name="alKredi[]" class="form-control" id="alKredi" placeholder="Almak İstediği Kredi">
      <label for="verKredi">Alabileceği Kredi</label>
      <input type="text" name="verKredi[]" class="form-control" id="verKredi" placeholder="Alabileceği Kredi">
      <?php  echo '<strong>Uygun mu?</strong><br><br>'; ?>
      <label for="evetKontrol">Evet</label>
      <input type="radio" id="evetKontrol" name="uygun" onclick="javascript:yesnoCheck();" value="uygun" checked>
      <label for="hayirKontrol">Hayır</label>
      <input type="radio" id="hayirKontrol" name="uygun" onclick="javascript:yesnoCheck();" value="uygunDegil">
      <div id="ifNo" style="visibility:hidden">
          <strong>Uygun Olmama Sebebi:</strong> <input type="textarea" id="hayirSebep" name="hayirSebep" style="height: 75px"><br>
      </div>
        <div class="input-group-addon">
            <a href="javascript:void(0)" class="btn btn-danger remove"><span class="glyphicon glyphicon glyphicon-remove" aria-hidden="true"></span> Remove</a>
        </div>
    </div>
</div>

полей. js

$(document).ready(function() {
   //group add limit
   var maxGroup = 25;

   //add more fields group
   $(".addMore").click(function() {
      if ($('body').find('.row').length < maxGroup) {
         var fieldHTML = '<div class="form-group row">' + $(".rowCopy").html() + '</div>';
         $('body').find('.row:last').after(fieldHTML);
      } else {
         alert('Maximum ' + maxGroup + ' groups are allowed.');
      }
   });
   //remove fields group
   $("body").on("click", ".remove", function() {
      $(this).parents(".row").remove();
   });
});

function yesnoCheck() {
   if (document.getElementById('evetKontrol').checked) {
      document.getElementById('ifNo').style.visibility = 'hidden';
   } else document.getElementById('ifNo').style.visibility = 'visible';
}

JS скрипка для демонстрации

Ответы [ 3 ]

2 голосов
/ 02 апреля 2020

попробуйте добавить var counter = 0; и '<div class="form-group row" id="radio' + counter +'">'

$(document).ready(function() {
       //group add limit
       var maxGroup = 25;
       var counter = 0;


       //add more fields group
       $(".addMore").click(function() {
          if ($('body').find('.row').length < maxGroup) {
             var fieldHTML = '<div class="form-group row" id="radio' + counter +'">' + $(".rowCopy").html() + '</div>';
             counter +=1;
             $('body').find('.row:last').after(fieldHTML);
          } else {
             alert('Maximum ' + maxGroup + ' groups are allowed.');
          }
       });

или простой класс без счетчиков <div class="form-group row" class="myRadio">

1 голос
/ 02 апреля 2020

Переключите "ifNo" на класс - идентификаторы ДОЛЖНЫ быть уникальными для правильной работы - и затем поместите это в свой yesnoCheck:

$ (this) .parent (). Find ('. IfNo '). css (' видимость ',' видимый ')

Родитель (единственное число до go на один уровень выше!) Ставит вас в .col-auto, так что вы все еще находитесь внутри своего row и find находят только то «ifNo», которое вы хотите.

, который достаточно хорошо работает для чего-то такого простого. Но для всего, что сложно сделать, я использую ту же идею, что и IronCat: генерировать уникальные идентификаторы строк и использовать их для навигации.

0 голосов
/ 05 апреля 2020

С помощью информации, предоставленной ironCat, мне удалось найти решение моей проблемы. Немного изменил свой код. Надеюсь, это будет полезно для таких новичков, как я.

$(function() {

  function addElement(tObj) {
    var counter = $("[id^='ogrenci']", tObj).length;
    var html = '<div class="col-auto" id="ogrenci_' + counter + '"><label for="ad">Ad</label><input type="text" name="ad[]" class="form-control" id="ad_' + counter + '" placeholder="Öğrencinin Adı"/><label for="soyad">Soyad</label><input type="text" name="soyad[]" class="form-control" id="soyad_' + counter + '" placeholder="Öğrencinin Soyadı"/><label for="no">No</label><input type="text" name="numara[]" class="form-control" id="no_' + counter + '" placeholder="Öğrencinin Numarası"><label for="course">Bölümü</label><input type="text" name="bolum[]" class="form-control" id="course_' + counter + '" placeholder="Öğrencinin Bölümü"><label for="alKredi">Almak İstediği Kredi</label><input type="text" name="alKredi[]" class="form-control" id="alKredi_' + counter + '" placeholder="Almak İstediği Kredi"><label for="verKredi">Alabileceği Kredi</label><input type="text" name="verKredi[]" class="form-control" id="verKredi_' + counter + '" placeholder="Alabileceği Kredi"><label for=""><strong>Uygun mu?</strong> </label><br><label for="evetKontrol_' + counter + '">Evet</label><input type="radio" id="evetKontrol_' + counter + '" name="uygun_' + counter + '" value="uygun" checked><label for="hayirKontrol_' + counter + '">Hayır</label><input type="radio" id="hayirKontrol_' + counter + '" name="uygun_' + counter + '" value="uygunDegil"><div id="ifNo_' + counter + '" style="visibility:hidden"><strong>Uygun Olmama Sebebi:</strong> <input type="textarea" id="hayirSebep_' + counter + '" name="hayirSebep" style="height: 75px"><br></div><div class="input-group-addon"><a href="#" id="remove_' + counter + '" class="btn btn-danger remove"><span class="glyphicon glyphicon glyphicon-remove" aria-hidden="true"></span> Remove</a></div></div>';
    tObj.append(html);
  }

  function showHidden() {
    $("[id^='hayirKontrol']").each(function(i, el) {
      var rel = $("#ifNo_" + i);
      if ($(el).is(":checked")) {
        rel.css("visibility", "visible");
      } else {
        rel.css("visibility", "hidden");
      }
    });
  }

  //add more fields group
  $("#add").click(function() {
    addElement($("#container"));
  });

  //remove fields group
  $('#container').on('click', "a[id^='remove']", function() {
    $(this).parents('div.col-auto').remove();
  });

  $("#container").on("change, click", "input[type='radio']", showHidden);
  showHidden();
});
<!DOCTYPE html>
<html>
  <head>
    <title>Fazla Kredi</title>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
    <script src="https://code.jquery.com/jquery-3.4.1.slim.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" ></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" ></script>
  </head>
  <body>

    <form method="post">
      <div class="form-group row" id="container">
        <div class="col-auto" id="ogrenci_0">
          <label for="ad">Ad</label>
          <input type="text" name="ad[]" class="form-control" id="ad_0" placeholder="Öğrencinin Adı" />
          <label for="soyad">Soyad</label>
          <input type="text" name="soyad[]" class="form-control" id="soyad_0" placeholder="Öğrencinin Soyadı" />
          <label for="no">No</label>
          <input type="text" name="numara[]" class="form-control" id="no_0" placeholder="Öğrencinin Numarası">
          <label for="course">Bölümü</label>
          <input type="text" name="bolum[]" class="form-control" id="course_0" placeholder="Öğrencinin Bölümü">
          <label for="alKredi">Almak İstediği Kredi</label>
          <input type="text" name="alKredi[]" class="form-control" id="alKredi_0" placeholder="Almak İstediği Kredi">
          <label for="verKredi">Alabileceği Kredi</label>
          <input type="text" name="verKredi[]" class="form-control" id="verKredi_0" placeholder="Alabileceği Kredi">
          <label for=""><strong>Uygun mu?</strong> </label><br>
          <label for="evetKontrol_0">Evet</label>
          <input type="radio" id="evetKontrol_0" name="uygun_0" value="uygun" checked>
          <label for="hayirKontrol_0">Hayır</label>
          <input type="radio" id="hayirKontrol_0" name="uygun_0" value="uygunDegil">
          <div id="ifNo_0" style="visibility:hidden">
            <strong>Uygun Olmama Sebebi:</strong> <input type="textarea" id="hayirSebep_0" name="hayirSebep" style="height: 75px"><br>
          </div>
          <div class="input-group-addon">
            <a href="javascript:void(0)" id="add" class="btn btn-success addMore"><span class="glyphicon glyphicon glyphicon-plus" aria-hidden="true"></span> Add</a>
          </div>
        </div>
      </div>
      <input type="submit" name="submit" class="btn btn-primary" value="SUBMIT" />
    </form>
<script src="fields.js"></script>
  </body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...