Я использую jquery datatables для отображения некоторых данных. В каждой строке есть кнопка редактирования, для которой я регистрирую обработчик щелчка с помощью live(), так что он работает с разбиением на страницы. Я делаю это по классу, так как я должен делать это для каждой строки. Что-то вроде: Datatables с функцией события click click
Это прекрасно работает. Но проблема возникает, когда пользователь выполняет поиск снова, и я делаю запрос ajax для получения нового набора результатов.
Я просто заменю существующую таблицу в dom новой. Теперь, когда я нажимаю на строку 1, появляется диалоговое окно редактирования для строки 1. Я нажимаю на строку 2, она открывает диалоговое окно редактирования для строки 1. Я снова нажимаю на строку 2, и на этот раз он открывает диалоговое окно редактирования для строки 2.
Затем я снова и снова нажимаю на строку 3. Он открывает диалоговое окно редактирования для строки 2 трижды, прежде чем отобразит диалог для строки 3.
Это продолжает расти. Я не понимаю, если я заменяю весь dataTable в div с помощью jquery, почему он должен регистрировать несколько событий?
В случае, если это имеет значение, у меня есть autoopen, установленное false в моем инициализаторе диалога, и я явно открываю и закрываю его.
Изменить (Подробнее):
Мне сложно создать пример... но более подробно... Я понял, что, поскольку я использую функцию live() для регистрации вызовов через разбиение на страницы, существует механизм регистрации кликов. Поэтому, когда я заменяю таблицу той же структурой, функция щелчка регистрируется из-за первого вызова live(). Но я делаю еще один звонок для live() по умолчанию, и теперь регистрируются два события кликов. Затем, когда я заменяю снова, регистрируются три клика за события. Я попытался преодолеть это, зарегистрировав события с помощью jquery click() после проверки того, что событие click уже зарегистрировано. Помогает с частью нескольких событий, но не регистрирует события на страницах с данными datatables.