Sqlite html5 Дублирование записей при вставке

У меня есть таблица журнала пользователей, которая вставляет запись для каждого действия пользователя, но иногда она дублирует вставленные записи.

мой код очень простой

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

РЕДАКТИРОВАТЬ У меня есть полный код публикации. Этот код работает отлично, но иногда дублирует строку в журнальной таблице.

С кем-нибудь такое случалось? Кто-нибудь знает, что это может быть?

Возможно, вы дважды вызываете этот фрагмент кода. Откуда ваша программа вызывает этот код?

lenilsondc 10.09.2018 17:23

Он вызывается, когда пользователь нажимает кнопку через Onclick, но если бы это было так, это происходило бы каждый момент и происходит только в 20% вызовов.

Dani Carla 10.09.2018 17:33

Хорошо, вы можете поделиться этой частью кода, который вы описали? Например, html, привязка события и обработчик, который вызывает вставку базы данных, чтобы люди могли попытаться воспроизвести это поведение.

lenilsondc 10.09.2018 17:40

Редактирую вопрос .. и добавляю полный код

Dani Carla 10.09.2018 20:30
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
4
26
1

Ответы 1

Вы, так сказать, дважды добавляете прослушиватель кликов. Существует функция 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().

Ваша помощь была очень полезной, я переделаю свой код и проведу новые тесты.

Dani Carla 10.09.2018 21:49

Другие вопросы по теме