简体   繁体   English

提交时防止在表单中再次加载功能

[英]Prevent function loading again in form when submit

I have a dynamic table created through a function tablekrw() in a form by JavaScript.我有一个通过 JavaScript 形式的函数 tablekrw() 创建的动态表。 This table loads some default values and creates 200 empty table rows on my page.该表加载了一些默认值并在我的页面上创建了 200 个空表行。 When submit, the table values are stored in a database.提交时,表值存储在数据库中。 But now, when I press submit, I got twice the values which are in the table.但是现在,当我按下提交时,我得到了表中值的两倍。

My minimal HTML code:我的最小 HTML 代码:

if (isset($_POST["submit"])) {
        $insert->Insert();
<form>
<table id="table1" class="table table-sw table-bordered">
                <tr id="tablehead">
                    <th>Sw</th>
                    <th>Krw</th>
                </tr>
                <tbody id="tablekrw">
                <script>
                    tableKrw();
                </script><
                /tbody>
                <tbody>
                <tr><td><label></label></td></tr>
                <tr><td><button type="button" id="empty1">Empty Sw Krw table</button></td></tr>
                </tbody>
            </table>

<tr>
    <td>
        <input class="btn btn-primary" type="submit" value="Submit" name="submit">
    </td>
</tr>
</form>

Function:功能:

function tableKrw() {
$('document').ready(function (e) {
    $('#tablekrw').append('<table></table>');
    var tr = $('#tablekrw').children();

    tr.append('<tr><td><input type="text" class="td-sw" name="sw1[]" value="0.15" id="default-td">' +
        '</td><td><input class="td-sw" type="text" name="krw[]" value="0.0"></td> </tr>');
for (let i = 0; i < 200; i++) {
        tr.append('<tr> <td><input type="text" class="td-sw" name="sw1[]" id="default-td">' +
            '</td><td><input class="td-sw" type="text" name="krw[]"></td> </tr>');
    }

The standard values 0.15 and 0.0 are now stored in the database as: 0.15 0.0 0.15 0.0标准值 0.15 和 0.0 现在存储在数据库中: 0.15 0.0 0.15 0.0

How can I prevent to store the values twice?如何防止将值存储两次? I tried with Preventdefault, but that didn't work.我尝试使用 preventdefault,但这没有用。

Insert() code:插入()代码:

$this->lastId = $db->lastInsertId();

        $sql = "insert into unsteady_state_table_krw (sw1, krw, us_id) values (:sw1, :krw, :us_id)";
        $stmt = $db->prepare($sql);
        $stmt->bindParam(':sw1', $this->sw1);
        $stmt->bindParam(':krw', $this->krw);
        $stmt->bindParam(':us_id', $this->lastId);
        foreach ($_POST['sw1'] as $key => $value) {
            if (!empty($_POST['sw1'][$key]) && ($_POST['krw'][$key])) {
                $this->sw1 = $_POST['sw1'][$key];
                $this->krw = $_POST['krw'][$key];
                $stmt->execute();

Seems you are creating your rows each time DOM is ready.每次 DOM 准备就绪时,您似乎都在创建行。 You can check that by storing a value in sessionStorage or localStorage when the job has been done, for example before appending all your rows again :您可以通过在作业完成后在 sessionStorage 或 localStorage 中存储一个值来检查这一点,例如在再次追加所有行之前:

if (typeof localStorage.rowsAlreadyCreated === 'undefined') {
    tableKrw();
    localStorage.rowsAlreadyCreated = 1;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM