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. Почему это так?
Вот полный код:
Я включил здесь jsfiddle:
Предоставлено слишком много нерелевантного кода. Просто предоставьте достаточно html и js (без php), чтобы сделать это минимальным примером конкретной проблемы.
@charlietfl Теперь все в порядке?
@El_Vanja извините. Теперь все в порядке?
@somanraj - на самом деле не лучше - все, что вам нужно сделать, это запустить приложение, щелкнуть правой кнопкой мыши страницу и нажать «Просмотреть исходный код». Скопируйте это и принесите.
Нет... это не сырой html, с которым мы можем работать. Ни один из этих php не имеет отношения к проблеме на стороне клиента, о которой вы спрашиваете. Php работает только на сервере. Вы также можете скопировать необработанный html из инспектора элементов инструментов браузера.
@charlietfl paste.debian.net/1176809
Отлично, но в вопросе должен быть минимальный код, а не полная страница кода в pastebin
@charlietfl Хорошо, я попытаюсь это сделать ..
Если вы нажмете <>
в вопросе, редактор может создать исполняемый фрагмент прямо здесь, на странице. Не нужно беспокоиться о большом количестве css... достаточно, чтобы отобразить базовую таблицу/кнопки и т.д.
@charlietfl Я включил jsfiddle.
jsfiddle очень похож на изображение в вашем сообщении SO. Какой следующий шаг? Отслеживание удаленных строк? Сделать фрагмент stackoverflow?
В вашей таблице, созданной при нажатии флажков, есть кнопка добавления? чтобы можно было добавить больше строк? какой идентификатор вам нужен для отслеживания? пожалуйста, дополните .
@Swathi Мне нужно выбрать все значения, которые динамически создаются с помощью $(".c").click.
Вы можете использовать ajax здесь? отправка всех данных таблиц с использованием json и ajax?
@Swati Да, определенно. Но я не знаком с этим. Не могли бы вы привести несколько примеров того, как это сделать.
Поскольку ваш 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>
Пожалуйста, попробуйте предоставить минимальный воспроизводимый пример.