Я пытаюсь создать таблицу с кнопкой в каждой строке, и при нажатии кнопки создается новая строка между текущей и последующей строкой.Если нажата любая другая кнопка, ранее созданная строка удаляется, а новая создается в новом правильном месте.И так далее, и так далее.Мой подход заключается в использовании оператора if, который бы проверял, нажата ли та кнопка в первый раз, если это так, создайте строку в нужном месте и сохраните ее в currPos.При втором и каждом последующем щелчке первым делом необходимо удалить ранее созданную строку и создать новую в нужном месте и сохранить вновь созданную позицию строки в currPos (для третьего щелчка, и каждый последующий будет знать, какую из них удалить).
Проблема в том, что 'if (first == true)' никогда не выполняется, поэтому ошибка требует объявить currPos в начале скрипта, поэтому я создал его со значением = -1, поэтому, когда какая-либо кнопкапри нажатии последняя строка удаляется, и весь код работает так, как я хочу.
Как я могу исправить свой оператор if, чтобы не объявлять currPos в начале скрипта, чтобы он'if (first == true)'?
/ * Для соединения onclick и specialFunc создается дополнительная переменная $ firstPHP, в которой есть два параметра, но в PHP он даже не используется - он знает, что должен иметьдва параметра, потому что JS будет использовать его (на самом деле создаст его) позже.Это хороший подход?Могу ли я сообщить кнопке onclick, что JS нужен единственный идентификатор строки из PHP и второй параметр создан в функции JS?* /
<?php
$firstPHP = true;
$provider = "Test_provider";
echo '<table id="my-table">';
for($counter = 0; $counter <= 5; $counter++){
$rowID=$counter+1;
echo' <tr id ="'.$counter.'"><td><button onclick="specialFunc('.$firstPHP.',\''.$rowID.'\')">'.$provider.'</button></td><td>Row '.$counter.' Col '.$counter.'</td><td>Row '.$counter.' Col '.$counter.'</td><td></td><td></td></tr>';
}
echo '</table>';
?>
<script>
var currPos= -1;
function specialFunc(first = true, test){
if (first == true){
function addRow(test) {
var currPos = test;
let tableRef = document.getElementById("my-table");
let newRow = tableRef.insertRow(test);
let newCell = newRow.insertCell(0);
newCell.colSpan = 5;
let newText = document.createTextNode('New bottom row1');
newCell.appendChild(newText);
first = false;
}
}
document.getElementById("my-table").deleteRow(currPos);
let tableRef = document.getElementById("my-table");
let newRow = tableRef.insertRow(test);
let newCell = newRow.insertCell(0);
newCell.colSpan = 5;
let newText = document.createTextNode('New bottom row2');
newCell.appendChild(newText);
currPos = test;
}
Проблема решена с помощью переключателя:
<?php
$provider = "Test_provider";
echo '<table id="my-table">';
for($counter = 0; $counter <= 10; $counter++){
$rowID=$counter+1;
echo' <tr id ="'.$counter.'"><td><button onclick="specialFunc('.$rowID.')">'.$provider.'</button></td><td>Row '.$counter.' Col '.$counter.'</td><td>Row '.$counter.' Col '.$counter.'</td><td></td><td></td></tr>';
}
echo '</table>';
?>
<script>
isFirst = true;
console.log(isFirst);
function addRow(test) {
var currPos = test;
let tableRef = document.getElementById("my-table");
let newRow = tableRef.insertRow(test);
let newCell = newRow.insertCell(0);
newCell.colSpan = 5;
let newText = document.createTextNode('TEXT INFO');
newCell.appendChild(newText);
}
function specialFunc(test){
switch(isFirst){
case true:
addRow(test);
isFirst = false;
currPos = test;
break;
case false:
document.getElementById("my-table").deleteRow(currPos);
addRow(test);
currPos = test;
}
}