Причина, по которой он запускается несколько раз, заключается в том, что вы просто связываете событие 'click'
с элементом (ами) с классом getDogs
! Когда вы связываете прослушиватель событий с помощью jQuery, (* в данном случае $('.getDogs').on('click', 'puppyButton', ...
) , он не перезаписывает предыдущий прослушиватель событий, а связывает новый прослушиватель, сохраняя предыдущие. Другими словами, каждый раз, когда вы щелкаете элемент .getDogs .puppyButton
, он добавляет новый слушатель click
для каждого предыдущего слушателя, поэтому код повторяется несколько раз!
Чтобы исправить его, вы должны отменить привязку предыдущий слушатель (вы можете сделать это с помощью jQuery s. unbinder для события *) , то есть:
async function getNumber() {
var $getDogs = $('.getDogs');
console.log('getNumber ran');
// unbind (remove) the previous 'click' listener, if any
$getDogs.off('click.get-number');
// binds the new onclick listener
await $getDogs.on('click.get-number', '.puppyButton', function (event) {
event.preventDefault();
$('.dogDisplay').empty();
console.log("Display emptied");
dogNumber = $('.puppyNumber').val();
console.log('dogNumber is: ' + dogNumber);
arrayAPI();
});
}
Обратите внимание, что я добавил event.namespace к событию 'click', таким образом вы гарантируете, что удаляете только этот указанный c прослушиватель событий, оставляя другие события 'click' привязанными к элементу .getDogs
) все еще работает!
Другой вариант - гарантировать, что вы связываете событие onclick
только при первом запуске кода.