Размножается обработчик событий
Помогите понять, почему происходит такое явление:
Я строю грид-таблицу и переопределяю обработчик события на кнопках переключения на другую страницу: updateListContacts: function (p, r) { $.ajax({ url: '/path/to/script', dataType: 'JSON', data: {page: p, rows: r}, type: 'POST', success: function (data) { if (typeof void null != typeof data['colmodel'] && data['colmodel'] != null && typeof void null != typeof data['rows'] && data['rows'] != null) { grid = $('#ListContacts'); var cm = data['colmodel']; var rdata = data['rows']; $('#ListContacts').jqGrid("clearGridData"); grid.jqGrid({ jsonReader: { repeatitems: false, id: 'NodId' }, datatype: 'local', data: rdata, colModel: cm, rowNum: typeof void null != typeof data['rowNum'] && data['rowNum'] != null ? data['rowNum'] : 20, pager: '#ListContactsPager', gridview: true, viewrecords: false, page: typeof void null != typeof data['page'] && null != data['page'] ? data['page'] : 1 }); grid.jqGrid('setGridParam',{ data: rdata, page: typeof void null != typeof data['page'] && null != data['page'] ? data['page'] : 1 }).trigger('reloadGrid'); var lp = Math.ceil(data['total'] / data['rowNum']); $('#ListContactsPager .ui-icon-seek-first').click(function(){ updateListContacts(1, $('#ListContacts').jqGrid('getGridParam', 'rowNum')); return false; }); $('#ListContactsPager .ui-icon-seek-prev').click(function(){ updateListContacts($('#ListContacts').jqGrid('getGridParam', 'page') - 1, $('#ListContacts').jqGrid('getGridParam', 'rowNum')); return false; }); $('#ListContactsPager .ui-icon-seek-next').click(function(){ var np = $('#ListContacts').jqGrid('getGridParam', 'page') + 1; if (np <= lp) { updateListContacts(np, $('#ListContacts').jqGrid('getGridParam', 'rowNum')); } return false; }); $('#ListContactsPager .ui-icon-seek-end').click(function(){ updateListContacts(lp, $('#ListContacts').jqGrid('getGridParam', 'rowNum')); return false; }); } } }) } И вот что происходит: при первом нажатии на следующую или предыдущую страницу функция updateListContacts выполняется один раз, при втором нажатии - уже два раза, в третий раз - четыре раза выполняется, потом 8 и так далее... Как заставить ее выполняться только один раз? |
скорей всего у вас повторно вешается событие на один и тот же элемент
вам стоит либо воспользоваться unbind('click').click(...) либо вешать live событие на родительский элемент через .on() в каком нить одном месте, ну или вынести так же click |
unbind помог!
Вопрос: а разве $('selector').click(function(){[native code]}) не затирает все уже имеющиеся обработчики? Или затирает не все, т.е. к примеру не затрагивает bind-овые? |
что ж... буду теперь знать)))
|
Часовой пояс GMT +3, время: 17:56. |