У меня есть таблица журнала пользователей, которая вставляет запись для каждого действия пользователя, но иногда она дублирует вставленные записи.
мой код очень простой
<script>
db.transaction(function(tx) {
tx.executeSql('INSERT INTO tab_log (date_occurrence,hour_occurrence,number_user,occurrence,obs_occurrence) VALUES (?,?,?,?,?)', [var_date, var_hour, var_number_user, var_occurrence, var_obs_occurrence]);
});
</script>
<input type = "button" name = "btn_finish" id = "btn_finish" value = "Finish" onclick = "this.blur();salvar();">РЕДАКТИРОВАТЬ У меня есть полный код публикации. Этот код работает отлично, но иногда дублирует строку в журнальной таблице.
С кем-нибудь такое случалось? Кто-нибудь знает, что это может быть?
Он вызывается, когда пользователь нажимает кнопку через Onclick, но если бы это было так, это происходило бы каждый момент и происходит только в 20% вызовов.
Хорошо, вы можете поделиться этой частью кода, который вы описали? Например, html, привязка события и обработчик, который вызывает вставку базы данных, чтобы люди могли попытаться воспроизвести это поведение.
Редактирую вопрос .. и добавляю полный код



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы, так сказать, дважды добавляете прослушиватель кликов. Существует функция carregado(), которая вызывается при событии windowload, которое связывает прослушиватель событий с кнопкой finish.
function carregado() {
document.getElementById('btn_finish').addEventListener('click', salvar);
}
Однако далее на стороне html вы устанавливаете атрибут onclick этой кнопки, заставляя ее вызывать salvar() дважды, поскольку onclick и addEventListener('click') оба привязывают к кнопке разных слушателей.
<input ... id = "btn_finish" value = "Finish" onclick = "this.blur();salvar();">
Что вы можете сделать, чтобы разобраться в этом, так это удалить вызов атрибута onlick для salvar(), поскольку он нарушает вашу логику, чтобы привязать событие только после завершения загрузки страницы с помощью carregado(), поэтому часть onclick кажется бесполезной в этом случае. Тем не менее, это предотвратит повторный вызов salvar().
Ваша помощь была очень полезной, я переделаю свой код и проведу новые тесты.
Возможно, вы дважды вызываете этот фрагмент кода. Откуда ваша программа вызывает этот код?