我有一个HTML表,我填充了数据库表中的信息。我已经使表格中的单元格可编辑点击并添加了jQuery以便在单元格完成编辑时捕获(最后一次按键后2.5秒),然后ajax将信息发送到单独的php文件以更新数据库表格改变了价值。我发现的一个问题是,如果单击该单元格进入另一个单元格并在这些2.5秒之前进行更改,则第一个更改永远不会更新到数据库。
我的问题是:我是否有任何方法可以更改下面的代码以捕获std::make_tuple
单元格是否被单击并立即发送到ajax以进行更改数据库表,以免错过任何更改?
<td>
答案 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);
});