Оператор поиска jqGrid Undefined - json


1

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

{
   "groupOp":"AND",
   "rules":[
      {
         "field":"FOO",
         "op":"ge",
         "data":"181"
      },
      {
         "field":"FOO",
         "op":"undefined",
         "data":"196"
      }
   ]
}

Как вы видите, оператор поиска во втором объекте - "undefined" - это нечетно, поскольку при выборе операторов поиска нет пустого/пустого варианта. Кто-нибудь видел это раньше? Это известная проблема? Я не могу воспроизвести его на моем конце, поэтому мне интересно, есть ли что-то особенное, что мой пользователь делает, чтобы вызвать это. Я запускаю jqGrid 3.8.2 с помощью jQuery 1.4.2.

Обновление: я могу воспроизвести ошибку в IE 7. Кажется, добавление второго параметра к поисковому запросу приводит к оператору undefined в этом браузере.

Обновление 2: Кажется, это должно было быть исправлено в jqGrid 3.6 в примечаниях к выпуску:

Исправить поискFilter в IE7 и IE6 нет вернуть значение undefined, когда больше чем поиск одного поля.

Это явно ошибка. Я собираюсь закрыть вопрос здесь.

  •  24
  •  1
  • 8 фев 2020 2020-02-08 08:05:31

1 ответ

2

Проблема и workaroung описаны здесь. Основной проблемой является ошибка jQuery. В качестве обходного пути вы должны включить следующий код на свою страницу

// we use workaround from http://www.trirand.com/blog/?page_id=393/bugs/in-multiple-search-second-and-subsequent-ops-are-sent-as-undefined-in-ie6/
// to fix the bug in the jQuery.clone (see http://bugs.jquery.com/ticket/6793 and
// dscussion on the http://api.jquery.com/clone/
$.event.special.click = {
    setup: function() {
        if ($(this).hasClass("ui-search")) {
            $(this).bind("click", jQuery.event.special.click.handler);
        }
        return false;
    },
    teardown: function() {
        $(this).unbind("click", jQuery.event.special.click.handler);
        return false;
    },
    handler: function(event) {
        //$(".ui-searchFilter td.ops select").attr("name", "op");
        $(".ui-searchFilter td.ops select").filter(function () {
            return $(this).css("display") != "none";
        }).attr("name", "op");
    }
};

В настоящее время разрабатывается новый плагин MultiSelect, который не имеет таких проблем (см. дополнительную информацию здесь). Вы можете загрузить новую бета-версию из GitHub. В моем недавнем ответе я включил демо, в котором использовался новый плагин.

  • 8 фев 2020 2020-02-08 08:05:32