Событие не запускается внутри функции при использовании jqGrid и jQuery - PullRequest
1 голос
/ 18 августа 2010

Я новичок в javascript, jQuery и jqGrid, так что это, вероятно, довольно простой вопрос.

Почему событие происходит здесь правильно, вызывая предупреждение:

        $("#list").jqGrid({loadComplete: alert('load complete')
            });

но не здесь, когда предупреждение находится внутри функции?

        $("#list").jqGrid({loadComplete:
                               function() {
                                    alert('load complete');
                               }
            });

Я предполагаю, что есть что-то довольно простое, что я (пока) не понимаю.

Спасибо. --Jeff

Ответы [ 3 ]

6 голосов
/ 19 августа 2010

После публикации ссылки http://ccclients.com/TEST/TEST.php я понимаю, какую ошибку вы совершаете. Вы не должны разделять определение jqGrid в двух вызовах:

jQuery("#list").jqGrid({
    datatype: 'xml',
    mtype: 'GET',
    loadonce: true,
    // other parameters
    caption: 'My first grid', 
    xmlReader: { 
        root: "export", 
        row: "row",
        repeatitems: false
    }
 });

и

$("#list").jqGrid({loadComplete: 
            function() {
                alert('load complete')
            }
});

но определите loadComplete как часть один вызов $("#list").jqGrid({ ... });, как показано ниже:

jQuery("#list").jqGrid({
    datatype: 'xml',
    mtype: 'GET',
    loadonce: true,
    // other parameters
    caption: 'My first grid', 
    xmlReader: { 
        root: "export", 
        row: "row",
        repeatitems: false
    },
    loadComplete: function(data) {
        alert('load complete');
    }
 });

Если вам необходимо установить обработчик событий позже, вы должны использовать метод setGridParam (см. Добавление обработчика событий в jqGrid после создания экземпляра )

Более того, я категорически не согласен с ответом Грокса. Функция loadComplete будет вызываться для всех типов данных (включая «xml», «json», «local» и т. Д.). Как вы можете видеть в документации под http://www.trirand.com/jqgridwiki/doku.php?id=wiki:events#execution_order, функция loadComplete является идеальным местом для внесения некоторых изменений в сетку после того, как данные загружены (или обновлены). Я использую эту функцию постоянно. Использование типа данных функции является последним способом, если вам нужно загрузить очень экзотические данные (ни xml, ни json и т. Д.). Для загрузки данных xml и json в jqGrid имеется множество функций настройки (см., Например, Настройка типа содержимого запросов, выполняемых jQuery jqGrid ). Таким образом, вы можете настроить вызов jQurey.ajax и преобразовать данные, используемые для ввода и вывода, в jQurey.ajax практически так, как вам нужно.

1 голос
/ 18 августа 2010

Требуется функция: когда вы передаете ему само предупреждение, вы вызываете предупреждение прямо тогда и пытаетесь присвоить обработчику результат .Вместо этого вам нужен фактический обработчик (анонимная функция в случае вашего второго вызова).

Дело не в том, что первый корректно запускает событие, он фактически запускается, как только запускается строка кода,Похоже, ваш код вообще не запускает обработчик loadComplete, это отдельная проблема с jqGrid.

0 голосов
/ 19 августа 2010

Я пытался сделать то же самое в последнее время (на той же позиции, что и вы, абсолютно новый для всего), loadComplete никогда не работал для меня. Расследуя сейчас, теперь, когда я понимаю это немного больше:

Глядя на источник, он появляется, когда loadComplete срабатывает только в том случае, если ваш тип данных имеет значение «script» или «xmlstring», что делает его довольно бесполезным. И странно.

Если вы пытаетесь использовать его, чтобы сделать что-то до того, как данные будут введены в сетку, я бы порекомендовал сделать ваш тип данных функцией и выполнить свой собственный ajax / любые другие операции там. Когда данные вернутся, просто сделайте grid.addData (data), и он заполнит сетку.

Если вы пытаетесь что-то сделать после ввода данных, используйте вместо него gridComplete, он надежно срабатывает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...