为什么使用if语句的函数无法正确执行自身?

时间:2019-07-10 09:01:11

标签: javascript php if-statement

我试图创建一个在每行中都有一个按钮的表,并且当单击该按钮时,在当前行和后续行之间会创建一个新行。如果按下任何其他按钮,则会删除先前创建的行,并在新的正确位置创建一个新行。等等等等。我的方法是使用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; 
    }
}

0 个答案:

没有答案