Обратные вызовы jQuery стреляют слишком рано - PullRequest
0 голосов
/ 25 ноября 2008

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

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

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

Ответы [ 3 ]

6 голосов
/ 25 ноября 2008

Я думаю, ключом к вашему ответу является открепление события, которое вы уже связали с событием щелчка. Я использовал это в 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 не отменяя привязки событие создает интересную рекурсивную ситуацию.

1 голос
/ 25 ноября 2008

или просто используйте .one , чтобы связать событие

0 голосов
/ 25 ноября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...