Это похоже на ошибку в jqGrid.Я заглянул в код и, кажется, понял проблему.
Каждый раз, когда пользователь нажимает на значок «развернуть» , будет выполняться код , который вызывает expandRow
и expandNode
методы.Код expandNode
сначала перезаписывает текущее значение параметра treeANode
в jqGrid, которое используется для внутренней идентификации строки, после которой будут добавлены новые данные.Затем будут установлены параметры nodeid
, parentid
(или n_left
и n_right
для сеточной модели 'nested'
) и n_level
нового запроса к серверу, после чего будет reloadGrid
Проблема в том, что позже , во время обработки reloadGrid
в начале внутреннего populate
метода, будет проверено внутреннее свойство .grid.hDiv.loading
, и если онобыл установлен как предыдущий все еще ожидающий запрос , тогда вторая перезагрузка сетки будет пропущена.Проблема в том, что значение параметра treeANode
уже изменено.Таким образом, элементы, возвращаемые как дочерние элементы первого расширяющегося узла, будут добавлены как clidren последнего нажатого узла.
В качестве исправления ошибки я предлагаю изменить строку кода для следующего
} else if (!this.grid.hDiv.loading) {
Таким образом, параметр treeANode
не будет перезаписан щелчком по секунде, если другой ожидающий запрос еще обрабатывается.
Вы можете скачать с здесь модифицированную версию jquery.jqGrid.src.js
и проверьте, будет ли проблема решена после исправления ошибки.Если это решит проблему, я выложу соответствующий отчет об ошибке с моим предложением, как исправить проблему на форуме trirand .
В качестве другого обходного пути вы можете использовать опцию loadui: 'block'
jqGrid, который не позволит взаимодействовать с пользователем во время обработки ожидающих запросов к серверу.