Иллюстрированный самоучитель по созданию сайтов

Дополнительные возможности формирования веб-страниц

Теперь можно несколько усложнить задачу. Пусть пользователь имеет возможность не только выбирать автора, но и вводить название книги (мало ли, может быть, он и не помнит имя автора). Кроме того, пусть него будет возможность отсортировать список книг по имени автора и. по названию книги.

Поскольку мы используем элемент управления Tabular Data, обе эти зада решаются очень просто. Чтобы пользователь мог сам ввести название ну ной книги, создадим для этого текстовое поле и кнопку Поиск рядом с ним:

<INPUT TYPE="text" NAME="book" SIZE="15" MAXLENGTH="25">
<INPUT TYPE="button" NAME="search" VALUE="Поиск" onClick="bookname()">

Как видите, кнопке Поиск мы назначили обработчик событий onClick. Тепе; при нажатии этой кнопки будет выполняться еще не написанная функция bookname(), которая должна выбрать из “базы данных” только те записи, в которых присутствует введенное пользователем название книги. Скорее всего, это будет одна запись, если, конечно, в базе нет книг с одинаковым названиями, как, например, “ Записки сумасшедшего” Гоголя и “Записки сумасшедшего” Толстого.

Собственно говоря, эта функция очень похожа на предыдущую – нам ведь всего лишь нужно применить свойство Filter, в условии которого сравнить значения поля Name (название книги) со строкой, введенной пользователем:

hudlit.Filter = "Name=" + document.all.book.value;
hudlit.Reset();

Правда, для наглядности хорошо бы при поиске введенной пользователем книги вернуть список выбора автора в исходное состояние, иначе может возникнуть следующая ситуация. Допустим, пользователь сначала выбрал из списка одного автора (например, пункт Толстой) и увидел на экране список имеющихся книг Толстого. Затем он решил поискать книгу под названием “Тихий Дон” (которой в нашей базе данных пока нет). Он вводит в строку поиска название книги и, естественно, не получает ничего в ответ.В этот момент он смотрит на экран и видит, что у него в списке авторов выбран Толстой. Тогда он начинает думать, что, наверное, компьютер искал “Тихий Дон” Толстого, хотя на самом деле фильтр применялся ко всей базе. Пользователь начинает раздражаться и нервничать.

Чтобы не возникало подобных недоумении, давайте просто при поиске введенного пользователем названия книги автоматически выбирать из списки авторов пункт Все. Для этого достаточно изменить свойство selectedlndex списка выбора:

document.all.auth.selectedlndex = 0;

Эту строку мы добавим в функцию bookname(). Аналогично можно посту-пить и при поиске книг одного автора – на всякий случай очищать поле ввода названия книги. Для этого добавим в функцию auth() следующую строку:

document.all.book.value = "";

Сортировка таблицы

Теперь давайте осуществим сортировку списка книг. Добавим для начала две кнопки – для сортировки по алфавиту, соответственно, авторов и названий книг:

<INPUT TYPE="button" VALUE="Сортировать по автору" onClick="sort_auth()">
<INPUT TYPE="button" VALUE="Сортировать по названию" onClick="sort_name()">

Теперь напишем сами функции сортировки. Для этого нам подойдет чудесное свойство элемента управления Tabular Data, которое называется SortColumn. В качестве его значения нужно указать поле, значения которого нужно сортировать. Для сортировки по фамилиям авторов в данном случае сле-дует указать поле Author, а для сортировки по названиям книг – поле Name. После этого нужно не забыть применить метод Reset(), чтобы заново “перерисовать” весь список:

function sort_auth() {
    hudlit.SortColumn = "Author";
    hudlit.Reset();
}
  
function sort_name() {
    hudlit.SortColumn = "Name";
    hudlit.Reset();
}

Кстати, применение метода сортировки может избавить от необходимости заботиться о расположении записей в файле базы данных Например, в данном случае при поступлении нового архива с текстом книги можно просто добавлять запись о нем в конец файла. При загрузке файла можно сразу применить сортировку. Кстати, это можно сделать и с помощью тега <PARAM>, который должен быть внутри тега <OBJECT> элемента управления Tabular Data:

<PARAM NAME="SortColumn" VALUE="Author">

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

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.