Можно ли разместить глобальный фильтр за пределами таблицы p: dataTable? - PullRequest
5 голосов
/ 08 января 2012

Мне нужно разместить глобальный фильтр таблицы p: dataTable вне самой таблицы,

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

Даже когда я помещаю фильтр в форму данных, но вне самой таблицы данных, он перестает работать (он работает на 100% внутри самой таблицы p: dataTable)

Вот определение самого фильтра

<p:inputText id="globalFilter" onkeyup="myTableNameTable.filter()" style="width:150px;"/>  

1 Ответ

7 голосов
/ 10 января 2012

Я решил проблему с помощью кнопки «прокси».

Я установил h:panelGroup, который окружал <p:inputText id="globalFilter"> стилем display:none, например:

<h:panelGroup style="display:none">  

затем добавил текст ввода в совершенно другое место

<h:panelGroup id="myFilter" >
    <h:inputText id="myFilter_text" />
</h:panelGroup>

И привязывает функцию JS, которая использует функцию jQuery on() (в более старой версии jQuery вы можете использовать delegete()), например:

    function searchKeyPressedHandler() {
        $(document).on("keyup", "#myFilter input", function (event) {
            var searchValue = document
                .getElementById('myFilter_text').value;

            $("#myTableId\\:globalFilter").val(searchValue);
            $("#myTableId\\:globalFilter").trigger('keyup')
        });
    }

Использовал $() и on (), потому что я использую дополнительную библиотеку jQuery 1.7.1, в противном случае мне пришлось бы использовать jQuery() вместо

$(document).on("keyup", "#myFilter input",

Я бы использовал

jQuery(document).delegate("#myFilter input","keyup",... 

(только что переключил первый и второй аргументы)

Вот и все, и я могу разместить вход фильтра там, где захочу.

...