Закрытые вкладки пользовательского интерфейса jquery снова отображаются при создании новых - PullRequest
1 голос
/ 29 февраля 2012

У меня есть таблица (jqGrid) внутри одной из вкладок пользовательского интерфейса jquery (первой). В этой таблице есть запросы на обслуживание, которые определены как ссылки в этой таблице. Когда ссылки нажаты, они должны открыть подробную информацию о запросе на обслуживание в новой вкладке, следующей за первой.

Проблема, с которой я сталкиваюсь, заключается в том, что когда вы открываете один из запросов на обслуживание в новой вкладке и закрываете его, сбрасываете количество вкладок в ту, в которой размещена таблица; Попытка открыть запрос на обслуживание снова приведет к тому, что информация о запросе на обслуживание будет открыта в новой вкладке, которая равна количеству предыдущих вкладок, которые были закрыты ранее.

Если быть точным, если у нас есть #ui-tab-1, щелкнув ссылку запроса на обслуживание внутри него, откроется информация о запросе на обслуживание в #ui-tab-2. Теперь, закрыв вкладку #ui-tab-2 и щелкнув ссылку на другой запрос на обслуживание, активируется #ui-tab-2 вместе с новой вкладкой #ui-tab-3. #ui-tab-2 содержит информацию о недавно открытом билете.

Я использую scrollableTabs v2.0 плагин / слой для обработки прокручиваемых вкладок.

Это код, который у меня есть

var $third_l_tabs = $('#table-nav').tabs({
    show: function(event, ui) {
        //we only care about the first tab which hosts the grid.
        if (ui.index == 0) {
            tableToGrid('#' + table_id, {
                defaults: {
                    recordtext: "View {0} - {1} of {2}",
                    emptyrecords: "No records to view",
                    loadtext: "Loading...",
                    pgtext: "Page {0} of {1}"
                },
                loadonce: true,
                height: 'auto'
            });
            jQuery('#' + table_id).trigger('reloadGrid');
        }

        $(ui.panel).on('click', "td[role='gridcell'] a", function(event) {
            //here where the addition of new tab fails.
            $third_l_tabs.tabs('add', this.href, $(this).find('b').text());  
            event.preventDefault();
        });
    },
})

И я проверял стек вызовов jQuery ui и заметил, что функция show() вкладок вызывается для каждой из этих закрытых старых неразделенных старых вкладок!

Это трассировка, которую я получил в Chrome, и, как вы можете видеть последние 3 строки, шоу вызывается снова и снова

$.tabs.show() at scp.js:580
$.Widget._trigger() at jquery-ui-1.8.17.custom.js:581
$.widget._tabify.showTab() at jquery-ui-1.8.17.custom.js:7195
$.widget._tabify() at jquery-ui-1.8.17.custom.js:7282    <-- it starts from here
jQuery.extend.dequeue() at jquery-1.7.1.js:2066
jQuery.fn.extend.dequeue() at jquery-1.7.1.js:2098
jQuery.extend.each() at jquery-1.7.1.js:658
jQuery.fn.jQuery.each() at jquery-1.7.1.js:271
jQuery.fn.extend.dequeue() at jquery-1.7.1.js:2097
$.widget._tabify.hideTab() at jquery-ui-1.8.17.custom.js:7211
$.widget._tabify() at jquery-ui-1.8.17.custom.js:7278
jQuery.extend.dequeue() at jquery-1.7.1.js:2066
jQuery.fn.extend.dequeue() at jquery-1.7.1.js:2098
jQuery.extend.each() at jquery-1.7.1.js:658
jQuery.fn.jQuery.each() at jquery-1.7.1.js:271
jQuery.fn.extend.dequeue() at jquery-1.7.1.js:2097
$.widget.load() at jquery-ui-1.8.17.custom.js:7544
$.widget._tabify() at jquery-ui-1.8.17.custom.js:7285
jQuery.event.dispatch() at jquery-1.7.1.js:3256
jQuery.event.add.elemData.handle.eventHandle() at jquery-1.7.1.js:2875
jQuery.event.trigger() at jquery-1.7.1.js:3144
jQuery.fn.extend.trigger() at jquery-1.7.1.js:3781
jQuery.extend.each() at jquery-1.7.1.js:658
jQuery.fn.jQuery.each() at jquery-1.7.1.js:271
jQuery.fn.extend.trigger() at jquery-1.7.1.js:3780
$.xui.tabs.$.extend._create.hiddenOn.right() at jquery.scrollabletab.js:101
jQuery.event.dispatch() at jquery-1.7.1.js:3256
jQuery.event.add.elemData.handle.eventHandle() at jquery-1.7.1.js:2875
jQuery.event.trigger() at jquery-1.7.1.js:3144
jQuery.fn.extend.trigger() at jquery-1.7.1.js:3781
jQuery.extend.each() at jquery-1.7.1.js:658
jQuery.fn.jQuery.each() at jquery-1.7.1.js:271
jQuery.fn.extend.trigger() at jquery-1.7.1.js:3780
$.Widget._trigger() at jquery-ui-1.8.17.custom.js:578
$.widget.add() at jquery-ui-1.8.17.custom.js:7411
(anonymous function)() at jquery-ui-1.8.17.custom.js:421
jQuery.extend.each() at jquery-1.7.1.js:658
jQuery.fn.jQuery.each() at jquery-1.7.1.js:271
$.widget.bridge.$.fn.(anonymous function)() at jquery-ui-1.8.17.custom.js:418
$.tabs.show() at scp.js:581
jQuery.event.dispatch() at jquery-1.7.1.js:3256
jQuery.event.add.elemData.handle.eventHandle() at jquery-1.7.1.js:2875

Буду признателен за любую помощь в том, что может быть проблемой. Я включил JSFiddle пример для этой проблемы.

1 Ответ

1 голос
/ 05 марта 2012

Добавление event.stop() после того, как event.preventDefault() сделали свое дело. Пожалуйста, смотрите http://jsfiddle.net/neo108/pY3pJ/1/

По какой-то причине событие вызывается более одного раза. Добавьте event.stop(), чтобы остановить запуск события во второй раз, и так далее ...

...