【问题标题】:Prevent function loading again in form when submit提交时防止在表单中再次加载函数
【发布时间】:2019-09-20 21:13:08
【问题描述】:

我有一个动态表,通过函数 tablekrw() 以 JavaScript 的形式创建。 此表加载一些默认值并在我的页面上创建 200 个空表行。提交时,表值存储在数据库中。 但是现在,当我按下提交时,我得到的值是表中值的两倍。

我的最小 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 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>');
    }

标准值 0.15 和 0.0 现在在数据库中存储为: 0.15 0.0 0.15 0.0

如何防止将值存储两次? 我尝试过使用 Preventdefault,但没有奏效。

插入()代码:

$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();

【问题讨论】:

  • $insert 是什么,$insert-&gt;Insert(); 有什么作用?
  • 尝试将 i 添加到您的 [] 中并记录 submitevent 以检测它是否触发两次
  • @Qirel $insert = new UnsteadyStateModel($pdo);并且 insert() 调用该类中的插入函数。
  • 当然,但我们仍然不知道insert() 方法是什么样的
  • 当我在 PHP 页面的表结构中以纯 HTML 格式写入值(0.15 和 0.0)时,没有使用 tablekrw() 函数,这些值会正确存储。我用 insert() 编辑了我的问题。此外,在我对数据库执行插入之前,我将所有 $_POST('name-value's') 写入文件,当我使用 tablekrw() 时,我得到了两倍的值,没有这个函数,我得到了正确数量的值.

标签: javascript php forms submit


【解决方案1】:

似乎每次 DOM 准备就绪时,您都在创建行。您可以通过在作业完成后在 sessionStorage 或 localStorage 中存储一个值来检查这一点,例如在再次附加所有行之前:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-13
    • 1970-01-01
    • 2017-05-15
    相关资源
    最近更新 更多