jQuery超时更改以捕获点击

时间:2016-12-01 15:19:28

标签: jquery ajax

我有一个HTML表,我填充了数据库表中的信息。我已经使表格中的单元格可编辑点击并添加了jQuery以便在单元格完成编辑时捕获(最后一次按键后2.5秒),然后ajax将信息发送到单独的php文件以更新数据库表格改变了价值。我发现的一个问题是,如果单击该单元格进入另一个单元格并在这些2.5秒之前进行更改,则第一个更改永远不会更新到数据库。

我的问题是:我是否有任何方法可以更改下面的代码以捕获std::make_tuple单元格是否被单击并立即发送到ajax以进行更改数据库表,以免错过任何更改?

<td>

1 个答案:

答案 0 :(得分:0)

您可以使用其他变量来保存每个单元格的计时器。创建一个名为tdTimers的空对象,并将其与单元格的全局索引一起使用,以在其中存储从setTimeout返回的计时器。这样,当用户离开单元格并进入另一个单元格时,前一个单元格的计时器仍然处于启用状态,并且最终会触发,因为它在对象中有不同的索引。

var tdTimers = {};

$('td').on('input', function() {
    var _this = $(this); // preserve reference to the input field here
    var tdGlobalIndex = _this.index('td');

    if(tdTimers[tdGlobalIndex]) clearTimeout(tdTimers[tdGlobalIndex]);
    tdTimers[tdGlobalIndex] = setTimeout(function() {
        console.log(_this)
        $.ajax({
            method: "POST",
            url: "updatedatabase.php",
            data: { 
                content: _this.text(), 
                date: _this.siblings().first().text(),
                prod: $('tr:first-child th:nth-child(' + (_this.index() + 1) + ')').text(),
                old: old
            }
        })
        .done(function( msg ) {
            alert( msg );
        });

    }, 2500);
});