Почему моя функция, которая использует оператор if, не выполняет себя правильно? - PullRequest
0 голосов
/ 10 июля 2019

Я пытаюсь создать таблицу с кнопкой в ​​каждой строке, и при нажатии кнопки создается новая строка между текущей и последующей строкой.Если нажата любая другая кнопка, ранее созданная строка удаляется, а новая создается в новом правильном месте.И так далее, и так далее.Мой подход заключается в использовании оператора 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; 
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...