Как отслеживать идентификаторы строк таблиц, созданных путем установки флажка, когда они могут быть удалены случайным образом

var m=0;
var tablemap=new Map();
var booleantable=[];
var keepingvalueofsubtable=[];
$(document).ready(function()
{  var array_items=[];


var obj=$("input:checkbox:not(:checked)");

console.info(obj[0]["id"]);
for (var i = 0, l = obj.length; i < l; i++) {
   $("#"+obj[i]['id']+"form").hide();

   tablemap[i]=obj[i]['id'];
   booleantable[i]=0;
    keepingvalueofsubtable[i] = [];

}

    ;  


$(".checkbox").change(function() {
    if (this.checked) {
        //Do stuff
    }
});


$('.frameopener').on('change', function(){
    {
       
           var formid=$(this).attr("id");
 
       
   
  $("#" + formid + "form").toggle();
    

}
});


 




 $('.c').click(function () {
       
 var m=$(this).attr('data-value');
 
    


    


booleantable[m]=booleantable[m]+1;

var html='<div class = "div-table-row">';
             html+='<div class = "div-table-col" id = "zerofirst" contenteditable = "true"></div>';
               html+='<div class = "div-table-col" id = "ZeroSecond" contenteditable = "true"></div>';
                html+='<div class = "div-table-col" id = "one" contenteditable = "true">0</div>';
                html+='<div class = "div-table-col" id = "two" contenteditable = "true">0</div>';
               html+=' <div class = "div-table-col" id = "three" >0</div>';
              
               
              html+=' <div class = "div-table-col"><center><div  class = "del" aria-hidden = "true"  data-value = "0"  ><i class = "fas fa-trash delete" ></i></div></center></div>';

               html+='</center></div>';
  

$("#"+tablemap[m]+"form").append(html);
alert(html);
html = "";


});



 $(document).on('click','.del',function(){


alert();

//alert($(this).attr('data-value').value());
alert($(this).attr("id"));
//const slug = str.substring(str.indexOf('-') + 1);
  
//alert(slug);

  } );
 



});
 {
   margin:0;
   padding:0;
   background-color:#f1f1f1;
  }
  .box
  {
   width:1270px;
   padding:20px;
   background-color:#fff;
   border:1px solid #ccc;
   border-radius:5px;
   margin-top:25px;
   box-sizing:border-box;
  }

.div-table {
  display: table;         
  width: auto;         
  background-color: #eee;         
  border: 1px solid #666666;         
  border-spacing: 5px; /* cellspacing:poor IE support for  this */
}
.div-table-row {
  display: table-row;
  width: auto;
  clear: both;
}
.div-table-col {
  float: left; /* fix for  buggy browsers */
  display: table-column;         
  width: 200px;         
  background-color: #ccc;  
}
.bttn{
width:100px;
height:10px;
}
<link href = "https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel = "stylesheet"/>
<script src = "https://kit.fontawesome.com/e22ff3c413.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
 <div class = "table-responsive"><table  class = "table"><tbody>
 
<tr><center> <legend>Choose your Block Items</legend><center><tr></tr><tr>
 
  <td>
    <input type = "checkbox" class = "frameopener" id = "mobilisation" ></td><td>Mobilisation
  </td>
 
  <td>
    <input type = "checkbox" class = "frameopener" id = "demolition" ></td><td>Demolition
  </td>
 
  <td>
    <input type = "checkbox" class = "frameopener" id = "substructure" ></td><td>Sub Structure
  </td>
 
  <td>
    <input type = "checkbox" class = "frameopener" id = "superstructure" ></td><td>Super Structure
  </td></tr>
 </tbody></table></div>
<form id = "mobilisationform">
      <div class = "div-table" id = "mobilisation">
             <div class = "div-table-row">
                <div class = "div-table-col" align = "center">Mobilisation</div>
                <div  class = "div-table-col">Unit</div>
                <div  class = "div-table-col">Quantity</div>
                <div  class = "div-table-col">Rate</div>
                <div  class = "div-table-col">Amount</div>
                 <div  class = "div-table-col"><center><div  aria-hidden = "true" class = "c" id = "addmobilisation" data-value = "0"  ><center><i class = "fas fa-plus"></i></center></div><center></div>
                
              
             </div>
            <div class = "div-table-row">
                 <div class = "div-table-col" id = "zerofirst" contenteditable = "true"></div>
                <div class = "div-table-col" id = "ZeroSecond" contenteditable = "true"></div>
                  <div class = "div-table-col" id = "one" contenteditable = "true">0</div>
                <div class = "div-table-col" id = "two" contenteditable = "true">0</div>
                <div class = "div-table-col" id = "three" >0</div>
                 <div class = "div-table-col"><center><div   aria-hidden = "true" class = "del" id = "delete-0" data-value = "0"  ><i class = "fas fa-trash delete" ></i></div></center></div>
            </div>

      </div>
  </form>


<form id = "demolitionform">
      <div class = "div-table" id = "demolition">
             <div class = "div-table-row">
                <div class = "div-table-col" align = "center">Demolition</div>
                <div  class = "div-table-col">Unit</div>
                <div  class = "div-table-col">Quantity</div>
                <div  class = "div-table-col">Rate</div>
                <div  class = "div-table-col">Amount</div>
                 <div  class = "div-table-col"><center><div  aria-hidden = "true" class = "c" id = "adddemolition" data-value = "1"  ><center><i class = "fas fa-plus"></i></center></div><center></div>
                
              
             </div>
            <div class = "div-table-row">
                 <div class = "div-table-col" id = "zerofirst" contenteditable = "true"></div>
                <div class = "div-table-col" id = "ZeroSecond" contenteditable = "true"></div>
                  <div class = "div-table-col" id = "one" contenteditable = "true">0</div>
                <div class = "div-table-col" id = "two" contenteditable = "true">0</div>
                <div class = "div-table-col" id = "three" >0</div>
                 <div class = "div-table-col"><center><div   aria-hidden = "true" class = "del" id = "delete-1" data-value = "0"  ><i class = "fas fa-trash delete" ></i></div></center></div>
            </div>

      </div>
  </form>


<form id = "substructureform">
      <div class = "div-table" id = "substructure">
             <div class = "div-table-row">
                <div class = "div-table-col" align = "center">Sub Structure</div>
                <div  class = "div-table-col">Unit</div>
                <div  class = "div-table-col">Quantity</div>
                <div  class = "div-table-col">Rate</div>
                <div  class = "div-table-col">Amount</div>
                 <div  class = "div-table-col"><center><div  aria-hidden = "true" class = "c" id = "addsubstructure" data-value = "2"  ><center><i class = "fas fa-plus"></i></center></div><center></div>
                
              
             </div>
            <div class = "div-table-row">
                 <div class = "div-table-col" id = "zerofirst" contenteditable = "true"></div>
                <div class = "div-table-col" id = "ZeroSecond" contenteditable = "true"></div>
                  <div class = "div-table-col" id = "one" contenteditable = "true">0</div>
                <div class = "div-table-col" id = "two" contenteditable = "true">0</div>
                <div class = "div-table-col" id = "three" >0</div>
                 <div class = "div-table-col"><center><div   aria-hidden = "true" class = "del" id = "delete-2" data-value = "0"  ><i class = "fas fa-trash delete" ></i></div></center></div>
            </div>

      </div>
  </form>


<form id = "superstructureform">
      <div class = "div-table" id = "superstructure">
             <div class = "div-table-row">
                <div class = "div-table-col" align = "center">Super Structure</div>
                <div  class = "div-table-col">Unit</div>
                <div  class = "div-table-col">Quantity</div>
                <div  class = "div-table-col">Rate</div>
                <div  class = "div-table-col">Amount</div>
                 <div  class = "div-table-col"><center><div  aria-hidden = "true" class = "c" id = "addsuperstructure" data-value = "3"  ><center><i class = "fas fa-plus"></i></center></div><center></div>

Создайте подтаблицу для списка элементов проверки.

У меня есть список флажков. Когда вы устанавливаете флажок, отображается таблица, созданная с помощью div. Проблема с этим заключается в том, что таблица, в которой я назначаю идентификаторы этим строкам этой таблицы, так как <tablename>+<tableid>+<subtableid>. Существует столбец для удаления строк подтаблицы. Когда я нажимаю «Удалить» в середине таблицы, строки удаляются. Как проще всего отслеживать неудаленные строки? Мне нужно передать все строки на следующую php-страницу в виде сообщения. Мне также нужно вычислить сумму, умножив количество и скорость и найти общую сумму. Как это сделать проще всего?

Вот что я пробовал:

php:

foreach( $checkboxitemsafterstripper as $key => $item ){


    echo '
    <form id = "'.$item.'form">
          <div class = "div-table" id = "'.$item.'">
                 ....'
 <div  class = "div-table-col"><center><div  aria-hidden = "true" class = "c" id = "add'.$item.'" data-value = "'.$key.'"  ><center><i class = "fas fa-plus"></i></center></div><center></div>
                <div   aria-hidden = "true" class = "del" id = "delete-'.$key.'" data-value = "0"  ><i class = "fas fa-trash delete" ></i></div></center>

JQuery:

var obj=$("input:checkbox:not(:checked)");

console.info(obj[0]["id"]);
for (var i = 0, l = obj.length; i < l; i++) {
   $("#"+obj[i]['id']+"form").hide();

   tablemap[i]=obj[i]['id'];
   booleantable[i]=0;
    keepingvalueofsubtable[i] = [];

}
$('.c').click(function () {
       
 var m=$(this).attr('data-value');

booleantable[m]=booleantable[m]+1;

var html='<div class = "div-table-row">';
             html+='<div class = "div-table-col" id = "zerofirst" contenteditable = "true"></div>';
               html+='<div class = "div-table-col" id = "ZeroSecond" contenteditable = "true"></div>';
                html+='<div class = "div-table-col" id = "one" contenteditable = "true">0</div>';
                html+='<div class = "div-table-col" id = "two" contenteditable = "true">0</div>';
               html+=' <div class = "div-table-col" id = "three" >0</div>';
              // html+='<div class = "div-table-col"><div class = "del" aria-hidden = "true"  id = "delete-'+m+'-'+booleantable[m]+'" data-value = "'+booleantable[m]+'"  ><center><i class = "fas fa-trash"></i></center></div></div>';
               
              html+=' <div class = "div-table-col"><center><div  class = "del" aria-hidden = "true"  data-value = "0"  ><i id = "'+tablemap[m]+'-'+m+'-'+booleantable[m]+'"class = "fas fa-trash delete" ></i></div></center></div>';

               html+='</center></div>';
  

$("#"+tablemap[m]+"form").append(html);
alert(html);
html = "";


});

Как реализовать удаление части:

$(document).on('click','.del',function(event){

console.info(event.target.id);


  } );
 



});
    ';
    }

jquery-часть:

Мой код отлично работает в Chrome, но не в Firefox. Почему это так?

Вот полный код:

https://pastebin.com/4TuRiVA1

Я включил здесь jsfiddle:

https://jsfiddle.net/ehd94t8k/1/

Пожалуйста, попробуйте предоставить минимальный воспроизводимый пример.

El_Vanja 14.12.2020 01:37

Предоставлено слишком много нерелевантного кода. Просто предоставьте достаточно html и js (без php), чтобы сделать это минимальным примером конкретной проблемы.

charlietfl 14.12.2020 01:48

@charlietfl Теперь все в порядке?

Midhun Raj 14.12.2020 01:50

@El_Vanja извините. Теперь все в порядке?

Midhun Raj 14.12.2020 01:50

@somanraj - на самом деле не лучше - все, что вам нужно сделать, это запустить приложение, щелкнуть правой кнопкой мыши страницу и нажать «Просмотреть исходный код». Скопируйте это и принесите.

Randy Casburn 14.12.2020 01:53

Нет... это не сырой html, с которым мы можем работать. Ни один из этих php не имеет отношения к проблеме на стороне клиента, о которой вы спрашиваете. Php работает только на сервере. Вы также можете скопировать необработанный html из инспектора элементов инструментов браузера.

charlietfl 14.12.2020 01:56

@charlietfl paste.debian.net/1176809

Midhun Raj 14.12.2020 02:04

Отлично, но в вопросе должен быть минимальный код, а не полная страница кода в pastebin

charlietfl 14.12.2020 02:05

@charlietfl Хорошо, я попытаюсь это сделать ..

Midhun Raj 14.12.2020 02:06

Если вы нажмете <> в вопросе, редактор может создать исполняемый фрагмент прямо здесь, на странице. Не нужно беспокоиться о большом количестве css... достаточно, чтобы отобразить базовую таблицу/кнопки и т.д.

charlietfl 14.12.2020 02:08

@charlietfl Я включил jsfiddle.

Midhun Raj 14.12.2020 02:27

jsfiddle очень похож на изображение в вашем сообщении SO. Какой следующий шаг? Отслеживание удаленных строк? Сделать фрагмент stackoverflow?

react_or_angluar 14.12.2020 02:35

В вашей таблице, созданной при нажатии флажков, есть кнопка добавления? чтобы можно было добавить больше строк? какой идентификатор вам нужен для отслеживания? пожалуйста, дополните .

Swati 14.12.2020 06:19

@Swathi Мне нужно выбрать все значения, которые динамически создаются с помощью $(".c").click.

Midhun Raj 14.12.2020 06:25

Вы можете использовать ajax здесь? отправка всех данных таблиц с использованием json и ajax?

Swati 14.12.2020 06:29

@Swati Да, определенно. Но я не знаком с этим. Не могли бы вы привести несколько примеров того, как это сделать.

Midhun Raj 14.12.2020 06:30
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
16
81
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поскольку ваш divs создается динамически, вам необходимо связать его со статическими элементами, то есть: любым div, body, документом и т. д. Затем, всякий раз, когда пользователь input на one или two div получает требуемое значение, используя $(this).text(), и другое значение, используя .closest() и find(), и добавляет необходимое значение для .three .

Затем, всякий раз, когда нажимается кнопка delete, просто используйте $(this).closest(".div-table-row").remove(), чтобы удалить весь div.

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

Демонстрационный код:

var m = 0;
var tablemap = new Map();
var booleantable = [];
var keepingvalueofsubtable = [];
//when one is input
$(document).on('input', '.one', function() {
  //get text using this and other input using closest
  var value = parseFloat($(this).text()) * parseFloat($(this).closest(".div-table-row").find(".two").text());
  if (isNaN(value))
    value = 0;
  $(this).closest(".div-table-row").find(".three").text(value);
});
$(document).on('input', '.two', function() {
  var valuetwo = parseFloat($(this).text()) * parseFloat($(this).closest(".div-table-row").find(".one").text());
  if (isNaN(valuetwo))
    valuetwo = 0;
  $(this).closest(".div-table-row").find(".three").text(valuetwo);


});
var array_items = [];
var obj = $("input:checkbox:not(:checked)");

for (var i = 0, l = obj.length; i < l; i++) {
  $("#" + obj[i]['id'] + "form").hide();

  tablemap[i] = obj[i]['id'];
  booleantable[i] = 0;
  keepingvalueofsubtable[i] = [];

}

$('.frameopener').on('change', function() {
  {
    var formid = $(this).attr("id");
    $("#" + formid + "form").toggle();
  }
});


$('.c').click(function() {

  var m = $(this).attr('data-value');
  booleantable[m] = booleantable[m] + 1;
  //added class
  var html = '<div class = "div-table-row">';
  html += '<div class = "div-table-col zerofirst " contenteditable = "true"></div>';
  html += '<div class = "div-table-col ZeroSecond" contenteditable = "true"></div>';
  html += '<div class = "div-table-col one"  contenteditable = "true">0</div>';
  html += '<div class = "div-table-col two"  contenteditable = "true">0</div>';
  html += ' <div class = "div-table-col three"  >0</div>';
  html += ' <div class = "div-table-col"><center><div  class = "del" aria-hidden = "true"  data-value = "0"  ><i class = "fas fa-trash delete" >delete</i></div></center></div>';

  html += '</center></div>';


  $("#" + tablemap[m] + "form").append(html);
  alert(html);
  html = "";


});


$(document).on('click', '.del', function() {
  $(this).closest(".div-table-row").remove() //remove rows
});


$("button.submit").click(function() {
  var main_array = new Array()
  //form which is visible
  $("form:visible").each(function() {
    //get id
    var table_of = $(this).attr('id');
    var main_inside = {} //create obj
    main_inside[table_of] = new Array();
    //loop through rows not first
    $(this).find(".div-table-row:not(:first)").each(function() {
      var inputs = {}; //creat obj
      //get values
      inputs["zeroone"] = $(this).find(".div-table-col:eq(0)").text();
      inputs["zerotwo"] = $(this).find(".div-table-col:eq(1)").text();
      inputs["one"] = $(this).find(".div-table-col:eq(2)").text();
      inputs["two"] = $(this).find(".div-table-col:eq(3)").text();
      inputs["three"] = $(this).find(".div-table-col:eq(4)").text();
      main_inside[table_of].push(inputs); //push in main_inside 


    })
    main_array.push(main_inside) //finally push in main array


  })
  console.info(main_array)
  //your json ..stringfy  & ajax request

})
body {
  margin: 0;
  padding: 0;
  background-color: #f1f1f1;
}

.box {
  width: 1270px;
  padding: 20px;
  background-color: #fff;
  border: 1px solid #ccc;
  border-radius: 5px;
  margin-top: 25px;
  box-sizing: border-box;
}

.div-table {
  display: table;
  width: auto;
  background-color: #eee;
  border: 1px solid #666666;
  border-spacing: 5px;
  /* cellspacing:poor IE support for  this */
}

.div-table-row {
  display: table-row;
  width: auto;
  clear: both;
}

.div-table-col {
  float: left;
  /* fix for  buggy browsers */
  display: table-column;
  width: 200px;
  background-color: #ccc;
}

.bttn {
  width: 100px;
  height: 10px;
}
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class = "table-responsive">
  <table class = "table">
    <tbody>
      <center>
        <legend>Choose your Block Items</legend>
      </center>

      <tr>

        <td>
          <input type = "checkbox" class = "frameopener" id = "mobilisation"></td>
        <td>Mobilisation
        </td>

        <td>
          <input type = "checkbox" class = "frameopener" id = "demolition"></td>
        <td>Demolition
        </td>


      </tr>
    </tbody>
  </table>
</div>
<form id = "mobilisationform">
  <div class = "div-table" id = "mobilisation">
    <div class = "div-table-row">
      <div class = "div-table-col" align = "center">Mobilisation</div>
      <div class = "div-table-col">Unit</div>
      <div class = "div-table-col">Quantity</div>
      <div class = "div-table-col">Rate</div>
      <div class = "div-table-col">Amount</div>
      <div class = "div-table-col">
        <center>
          <div aria-hidden = "true" class = "c" id = "addmobilisation" data-value = "0">
            <center><i class = "fas fa-plus">add</i></center>
          </div>
        </center>
      </div>


    </div>
    <div class = "div-table-row">
    <!--added class-->
      <div class = "div-table-col zerofirst" contenteditable = "true"></div>
      <div class = "div-table-col ZeroSecond" contenteditable = "true"></div>
      <div class = "div-table-col one" contenteditable = "true">0</div>
      <div class = "div-table-col two" contenteditable = "true">0</div>
      <div class = "div-table-col three" class = "three">0</div>
      <div class = "div-table-col">
        <center>
          <div aria-hidden = "true" class = "del" id = "delete-0" data-value = "0"><i class = "fas fa-trash delete">delete</i></div>
        </center>
      </div>
    </div>

  </div>
</form>


<form id = "demolitionform">
  <div class = "div-table" id = "demolition">
    <div class = "div-table-row">
      <div class = "div-table-col" align = "center">Demolition</div>
      <div class = "div-table-col">Unit</div>
      <div class = "div-table-col">Quantity</div>
      <div class = "div-table-col">Rate</div>
      <div class = "div-table-col">Amount</div>
      <div class = "div-table-col">
        <center>
          <div aria-hidden = "true" class = "c" id = "adddemolition" data-value = "1">
            <center><i class = "fas fa-plus">add</i></center>
          </div>
        </center>
      </div>


    </div>
    <div class = "div-table-row">
      <div class = "div-table-col zerofirst" contenteditable = "true"></div>
      <div class = "div-table-col ZeroSecond" contenteditable = "true"></div>
      <div class = "div-table-col one" contenteditable = "true">0</div>
      <div class = "div-table-col two" contenteditable = "true">0</div>
      <div class = "div-table-col three">0</div>
      <div class = "div-table-col">
        <center>
          <div aria-hidden = "true" class = "del" id = "delete-1" data-value = "0"><i class = "fas fa-trash delete">delete</i></div>
        </center>
      </div>
    </div>

  </div>
</form>


<button class = "submit" type = "submit">Submit All</button>
<out></out>

Другие вопросы по теме