Показать сообщение отдельно
  #1 (permalink)  
Старый 22.10.2012, 12:59
Профессор
Отправить личное сообщение для demoniqus Посмотреть профиль Найти все сообщения от demoniqus
 
Регистрация: 28.05.2008
Сообщений: 182

Размножается обработчик событий
Помогите понять, почему происходит такое явление:
Я строю грид-таблицу и переопределяю обработчик события на кнопках переключения на другую страницу:
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 и так далее...
Как заставить ее выполняться только один раз?
Ответить с цитированием