我试图创建一个在每行中都有一个按钮的表,并且当单击该按钮时,在当前行和后续行之间会创建一个新行。如果按下任何其他按钮,则会删除先前创建的行,并在新的正确位置创建一个新行。等等等等。我的方法是使用if语句,该语句将检查是否第一次按下了哪个按钮,如果是,则在正确的位置上创建一行并将其保存到currPos中。在第二次和随后的单击中,第一件事是删除先前创建的行,并在适当的位置创建新行,然后将新创建的行位置保存到currPos(以便第三次单击,随后每个后续行都知道要删除哪个行)。 / p>
问题是'if(first == true)'从未执行,这就是为什么错误要求在脚本开头声明currPos的原因,所以我用value = -1创建了它,因此无论何时按下哪个按钮最后一行被删除,整个代码都按我的要求工作。
我该如何修正我的if语句,以便不在脚本开头声明currPos,以便在'if(first == true)'中进行声明?
/ * 额外 创建变量$ firstPHP来连接onclick和specialFunc这有两个参数,但是在PHP中甚至没有使用它-它知道必须有两个参数,因为JS稍后会使用它(实际上创建它自己的)。 那是好方法吗?我可以告知onclick按钮JS需要PHP中的唯一rowID,而第二个参数是在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;
}
}