Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Многократное выполнение функции (https://javascript.ru/forum/dom-window/58205-mnogokratnoe-vypolnenie-funkcii.html)

AngrySpoon 09.09.2015 13:58

Многократное выполнение функции
 
Добрый день!

Ситуация следующая:
есть табличка
<table border="1px">
    <thead>
        <th>1</th>
        <th>2</th>
    </thead>
    <tbody>
        <tr>
            <td class='rem'>1.1</td>
            <td class='rem'>1.2</td>
        </tr>
        <tr>
            <td class='rem' onclick="GoRemove()">1</td>
            <td class='rem' onclick="GoRemove()">2</td>
        </tr>
    </tbody>
</table>


на ячейках второй строки таблицы, как вы видите, висит обработчик:
function GoRemove() {
    alert('js start');
    $('td.rem').click( function() {
    	alert($(this).parent().find("td:eq(0)").html());
        return false;
    });
    alert('js end');
}


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

Почему так происходит? Как это можно обойти?

krasovsky 09.09.2015 14:23

Ну ты конечно молодец, навешиваешь клик на элемент кликом. И удивляешься.
При клике по td.rem происходит вызов функции GoRemove которая навешивает обработчик клика на все td.rem. И ничего визуально не происходит. При втором клике таки происходит удаление, и снова навешивается обработчик клика, то есть уже 2 обработчика, которые соответвенно исполняются 2 раза и так далее по нарастающей.

Цитата:

Сообщение от krasovsky
Как это можно обойти?

вешать обработчики вне функции

AngrySpoon 09.09.2015 14:28

Принял, спасибо огромное! эт я что-то тормознул))
Еще раз спасибо, пойду делать)


Часовой пояс GMT +3, время: 16:52.