php AJAX仅获取最后一个表单的值

cqoc49vn  于 12个月前  发布在  PHP
关注(0)|答案(1)|浏览(125)

我正在使用AJAX来自动更新文本输入和文本区域,并将它们保存到数据库中。
一切正常,直到有两个表单相同的表单。我发现AJAX函数是从表单中获取值。我用console.log(data)检查。我想知道最后一个表单是否覆盖了所有内容。
如果所有的名字都是唯一的,它也能很好地工作。但是,我的SQL代码会有太多的重复,如果用户制作10个这样的表单,它就没有效率了。
我要怎么做才能让这一切不发生?
谢谢你,谢谢
index.php

<form method="post" class="form-input">
    <input type="hidden" name="position" value="1" class="position">
    <table>
        <tbody>
            <tr>
                <td class="th">Offer Heading</td>
                <td><input name="heading" class="text-input" type="text"></td>
            </tr>
            <tr>
                <td class="th">Description</td>
                <td><textarea name="description"></textarea></td>
            </tr>
            <tr>
                <td class="th">Call-To-Action</td>
                <td><input name="call_to_action" class="text-input" type="text"></td>
            </tr>
        </tbody>
    </table>
</form>

字符串
script.js

var timeoutId;
    $('textarea, .text-input').on('input propertychange change', function() {
        console.log('Textarea Change');

        clearTimeout(timeoutId);
        timeoutId = setTimeout(function() {
            // Runs 1 second (1000 ms) after the last change
            saveToDB();
        }, 1000);
    });
    
    function saveToDB() {
        console.log('Saving to the db');
        var data = $(".form-input").serialize();
        console.log(data);
        $.ajax({
            url: "",
            type: "POST",
            async: true,
            cache: false,
            data: data,
            success: function(data){
                console.log('completed');
            }
        });
    }
    
    $('.form-input').submit(function(e) {
        saveToDB();
        e.preventDefault();
    });


谢谢你,谢谢

ecfsfe2w

ecfsfe2w1#

下面是一个片段,演示了在对这个问题的评论中提出的一些观点。我做的另一个改变是,我不再使用全局变量timeoutId来存储超时句柄。相反,我将此信息存储在.timeoutId中-属性。这将防止在另一个表单中的文本字段随后被直接更改时不存储来自另一个表单的数据的错误。

$('textarea, .text-input').on('input propertychange change', function() {
    const frm=$(this).closest("form")[0];
    console.log(frm.name,'Textarea Change');

    clearTimeout(frm.timeoutId);
    frm.timeoutId = setTimeout(function() {
        // Runs 3 seconds (3000 ms) after the last change
        saveToDB(frm);
    }, 3000);
});

function saveToDB(frm) {
    console.log(frm.name,'Saving to the db');
    var data = $(frm).serialize();
    console.log(data);
    /* $.ajax({
        url: "",
        type: "POST",
        async: true,
        cache: false,
        data: data,
        success: function(data){
            console.log('completed');
        }
    });*/
}

$('.form-input').submit(function(e) {
    saveToDB(this);
    e.preventDefault();
});

个字符

相关问题