Oracle DB, Oracle APEX, Linux etc.

Показаны сообщения с ярлыком mini. Показать все сообщения
Показаны сообщения с ярлыком mini. Показать все сообщения

понедельник, 29 марта 2010 г.

APEX: Popup Key LOV, onChange и Submit

Сегодня на повестке дня три небольших вопроса, которые возникают относительно Popup Key LOV в APEX. В ответах P1_POPUP_KEY будет использоваться в качестве элемента этого типа.

Внимание: ответы верны для APEX версии 3.2. В принципе, они должны быть правильными и для более ранних версий, но если что не так - задавайте вопросы в комментариях.

0. Как получить значение ключа выбранного значения?


Если попробовать использовать $v("P1_POPUP_KEY"), то мы получим отображаемое значение, а не ключ, ради которого и используется обычно Popup Key LOV. Но если взглянуть в исходный код страницы, то рядом с элементом P1_POPUP_KEY мы увидим ещё один скрытый - P1_POPUP_KEY_HIDDENVALUE, который и хранит ключ.

1. Можно ли использовать событие onChange у элемента Popup Key LOV?


Можно. :) Попробуйте добавить элементу следующий код в HTML Form Element Attributes и изменить его значение в приложении:
onChange="alert($v(this) + ';' + $v(this.id+'_HIDDENVALUE'))"

2. Можно ли сделать Popup LOV, выполняющий SUBMIT при изменении значения?


Зная ответ на предыдущий вопрос, легко понять, что можно. Вот небольшой JavaScript-код с объектом, автоматизирующим этот процесс:
/* Помните, этот код использует jQuery. */
submitPopupLov = {
addSubmitHandlerToPopupLov : function (pLovId, pSubmitRequest){
$("#" + pLovId).addClass("submit-popup-lov submit-popup-lov-processed");
$("#" + pLovId + "_HIDDENVALUE").change(function (){
doSubmit(!!pSubmitRequest ? pSubmitRequest : pLovId);
});
},
setPopupLovSubmit : function (pLovId){
$("#" + pLovId).addClass("submit-popup-lov submit-popup-lov-not-processed");
},
processSubmitablePopupLovs : function (){
$(".submit-popup-lov-not-processed").each(function(){
$(this).removeClass("submit-popup-lov-not-processed").addClass("submit-popup-lov-processed");
$("#"+this.id + "_HIDDENVALUE").change(function(){
doSubmit(this.id);
});
});
}
};


Я надеюсь, вопросов без ответов стало меньше. :)

Читать далее