Обратные вызовы jQuery срабатывают слишком рано

У меня проблема при назначении функций событию нажатия кнопки в IE 7 с помощью jQuery. Что-то вроде следующего отлично работает в Opera, но создает бесконечный цикл в IE:

function updateIndputFields(index, id) {
   $("#reloadBtn").click(function(){ updateIndputFields(index, id) });
}

Насколько я понимаю, бесконечный цикл не был бы ожидаемым поведением в этой ситуации. Но я новичок в jQuery, так что, возможно, я что-то пропустил. В любом случае, что мне делать, чтобы для события щелчка кнопки reloadBtn было установлено значение updateIndputFields (index, id) в IE?

Поведение ключевого слова "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
0
1 765
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Попробуйте отвязать событие перед его привязкой.

Ответ принят как подходящий

Я думаю, что ключ к вашему ответу заключается в отмене привязки события, которое вы уже связали с событием щелчка. Я использовал это в IE, и, если я понимаю, что вы пытаетесь сделать, похоже, что он делает то, что вам нужно:

<script type = "text/javascript">
function updateIndputFields(index, id) {
$('#output').append('<p>' + index + ' : ' + id + '</p>');
$('#reloadBtn').unbind('click');
$("#reloadBtn").click(function(){ updateIndputFields(index, id) });
}
</script>
<p><a href = "#" id = "reloadBtn">reload</a></p>
<p><a href = "#" onclick = "updateIndputFields(1,2);return false;">start</a></p>
<div id = "output"></div>

Каждый щелчок должен выводить переданные параметры ровно один раз в выходной div.

Если вы не отмените привязку первоначально назначенного события щелчка, оно останется в наличии, и вы прикрепите дублирующий обработчик события щелчка к событию каждый раз, когда он щелкнет. Даже в Firefox невыполнение привязки события создает интересную рекурсивную ситуацию.

Это то, что я предположил со своим ответом: обратные вызовы накапливались.

strager 25.11.2008 01:56

или просто используйте .один для привязки события

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