Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ajax_v_deystvii.pdf
Скачиваний:
34
Добавлен:
05.03.2016
Размер:
5.83 Mб
Скачать

Некоторые разработчики используют специальные уловки CSS только для того, чтобы установить в Internet Explorer большую ширину элемента: 1

style="width:100px;_width:250px"

Internet Explorer распознает ширину, начинающуюся со знака подчеркивания, тогда как другие браузеры ее игнорируют. Следовательно, рамки выбора Internet Explorer будут иметь ширину 250 пикселей, тогда как другие браузеры — 100 пикселей. Однако полагаться на подобные "специфические особенности" браузера не стоит, поскольку в будущем их, возможно, исправят, а это нарушит отображение ваших страниц.

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

9.5. Дополнительные вопросы

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

9.5.1. Запросы при выборе нескольких элементов

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

Первое, что требуется сделать, — это настроить первый список так, чтобы разрешить выбор нескольких позиций. Для этого к дескриптору select нужно добавить атрибут multiple. Чтобы задать количество отображаемых опций, можно добавить атрибут size. Если значение size меньше числа опций, список будет прокручиваемым (и можно будет выбирать элементы, которые не видны в текущий момент).

<select name="ddlRegion" multiple size="4"

onchange="FillTerritory(this,document.Forml.ddlTerritory)"> <option value="l">Eastern</option>

<option value=:"2">We3tern</option> <option value="3">Northern</option>

<option value="4">Southern</option> </select>

WHERE

Далее необходимо изменить функцию FillTerritory<). Вместо того чтобы просто обращаться к выбранному номеру элемента select, нам требуется последовательно пройти по всем опциям и найти все выбранные значения. Затем значения всех выбранных опций добавляются в строку параметров.

function FillTerritory(oElem,oTarget){ var url = 'DoubleComboMultiple.aspx1;

var strParams — "f=" + oTarget.form.name + "&e=" + oTarget.name; for(var i=0;KoElem.options.length;i++)[

if(oElem.options[i].selected){

strParams += "&q=" + oElem.options[i].value;

}

}

var loaderl = new net.ContentLoader(url,FillDropDown,null,"POST",strParams);

}

Последнее, что требуется сделать, — это изменить код серверной части сценария, реализовав обработку нескольких значений, переданных в запрос. В .NET несколько значений, разделенныхзапятыми, представляются водной строке. Чтобы получить отдельные элементы, необходимо расщепить строку на массив. Затем с помощью циклического прохода массивазадается условие

для оператора SQL.

Dim strQuery As String - Request.Form("q") Dim strWhere As String = ""

Dim arrayStrt) As String = strQuery.Split(",") Dim i As Integer

For Each i In arrayStr

If strWhere.Length > 0 Then strWhere - strWhere & " OR "

End If

strWhere = strWhere & " regionid = " & i Next

Dim strSql As String = "SELECT " & _

"TerritoryDescription, " & _

"TerritorylD" & __

"FROM Territories" & _

"WHERE " & strWhere & _

"ORDER ВУ TerritoryDescription"

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

9.5.2. Переход от двойного связного выбора к тройному

Переход от двойного связного списка к тройному требует минимальных изменений (в зависимости от того, насколько мы хотим изменить логику сервера). Первый вариант заключается в том, чтобы перенести нашу логику на несколько серверных страниц и на каждой из них запустить свой запрос. Такое решение означает добавление к каждому обработчику onchange нужного списка еще одного параметра, представляющего URL вызываемого серверного сценария.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]