Я использую Oracle Application Express 4.2, и у меня есть LOV (список значений) со списком номеров рейсов в списке выбора. Это динамический список значений. Я хочу добавить статическое значение в верхней части списка выбора, которое говорит "Предстоящие". Я также хочу добавить статическое значение перед конкретным полетом в списке выбора, который говорит "Прошлые рейсы". Таким образом, я могу различать в списке выбора, какие полеты предстоят и какие прошлые рейсы. Мой динамический LOV в настоящее время называется P_100_FLIGHT_LOV2.
У меня есть код JavaScript ниже, который выполняется при загрузке страницы, и он добавляет статическое значение "Предстоящее" в мой список выбора, но он добавляет в качестве последнего параметра. Я хочу это наверху и один посередине перед конкретным полетом. Как я могу достичь этого с помощью JavaScript?
Вот мой код JavaScript ниже:
var x = document.getElementById("P100_FLIGHT_LOV2");
var option = document.createElement("option");
option.text = "Upcoming";
x.add(option);
Вот результаты этого кода JS в настоящее время:
SPX-14
67P
OA-9
55S
DRAGONX
34R
UPCOMING ----------CURRENTLY AT BOTTOM OF SELECT LIST
Желаемый набор результатов, который я хочу достичь:
UPCOMING -----------STATIC VALUE
SPX-14
67P
OA-9
PAST FLIGHTS ---------STATIC VALUE
55S
DRAGONX
34R
Это код JavaScript, который мне нужно, чтобы добавить статическое значение в мой существующий LOV. Этот код JavaScript выполняется при загрузке страницы и добавляет статическое значение "Прошлые рейсы" к указанному параметру. Спасибо за помощь всем.
$('#P100_FLIGHT_LOV2 option[value="55S"]').before('<option value="Past">--- Past Flights ---</option>');
Я не знаю, как это сделать с помощью JavaScript, но я знаю, как это сделать с помощью Oracle. Итак, вот и вы.
SQL> with flight_schedule (flight, sched) as
2 (select 'SPX-14' , to_date('12.01.2018 22:00', 'dd.mm.yyyy hh24:mi') from dual union
3 select '67P' , to_date('12.01.2018 22:15', 'dd.mm.yyyy hh24:mi') from dual union
4 select 'OA-9' , to_date('12.01.2018 22:40', 'dd.mm.yyyy hh24:mi') from dual union
5 select '555' , to_date('12.01.2018 18:30', 'dd.mm.yyyy hh24:mi') from dual union
6 select 'DRAGONX', to_date('12.01.2018 19:00', 'dd.mm.yyyy hh24:mi') from dual union
7 select '34R' , to_date('12.01.2018 19:28', 'dd.mm.yyyy hh24:mi') from dual),
8 static_values as
9 (select 1 what, 'UPCOMING' statval from dual union
10 select 3 , 'PAST FLIGHTS' from dual
11 ),
12 --
13 prep as
14 (-- Static values
15 select what, statval flight, null sched
16 from static_values x
17 union
18 -- Upcoming flights
19 select 2 what, flight, sched
20 from flight_schedule
21 where sched > sysdate
22 union
23 -- Past flights
24 select 4 what, flight, sched
25 from flight_schedule
26 where sched <= sysdate
27 )
28 select flight, sched scheduled_time
29 from prep
30 order by what, sched;
FLIGHT SCHEDULED_TIME
------------ ----------------
UPCOMING
SPX-14 12.01.2018 22:00
67P 12.01.2018 22:15
OA-9 12.01.2018 22:40
PAST FLIGHTS
555 12.01.2018 18:30
DRAGONX 12.01.2018 19:00
34R 12.01.2018 19:28
8 rows selected.
SQL>
Несколько примечаний:
О, да, еще одна вещь: поскольку это Apex LoV, вам нужно будет выбрать два значения: отображение и возвращаемое значение; что бы это было, вы узнаете лучше (вероятно, ПОЛЕТ и его идентификатор, или что-то в этом роде).
Самый удобный способ сделать это - использовать подключаемый модуль Select2. Как написано на плагине, она совместима с версией 4.2.
В свойствах подключаемого модуля вам нужно написать запрос, который возвращает 3 столбца. Третий - это столбец для имен групп (UPCOMING
И PAST FLIGHTS
):
select 'SPX-14' display_value, 1 return_value, 'UPCOMING' group_name from dual union all
select '67P', 2, 'UPCOMING' from dual union all
select 'OA-9', 3, 'UPCOMING' from dual union all
select '55S', 4, 'PAST FLIGHTS' group_name from dual union all
select 'DRAGONX', 5, 'PAST FLIGHTS' from dual union all
select '34R', 6, 'PAST FLIGHTS' from dual
См. Пример "Группировка параметров" на странице подключаемого модуля Select2.
Решение Javascript для этого не зависит от APEX. Поскольку APEX использует библиотеку jQuery, этот SO-ответ должен это сделать.
(NB Я не предлагал закрыть этот вопрос как дубликат, потому что @Littlefoot также показал, что в APEX, в частности, есть другие способы сделать это без использования Javascript.)