2016-08-22 75 views
1

晚上好!在Oracle Apex中實現對Shuttle價值的依賴

我在Oracle Apex中創建一個頁面,這導致創建一個文檔。這個頁面有很多字段,比如「文本字段」或「選擇列表」等等,都有自己的邏輯,而且我有兩個字段 - 穿梭字段(讓它被命名爲A)和文本字段(讓它被命名爲B),這應該取決於第一個。他們互動的方案是這樣的:

  • 班車A的值爲「A」,「B」,「C」,「D」和「其他」;
  • 如果從航天飛機中選擇其他值的「別人」,則還應填寫文本字段B.換句話說,在這種情況下,應該要求字段B.

我的問題是,我不能讓字段B的行爲取決於字段A的值。如果梭子B的右半部分具有「其他」值,我已經嘗試使用來自「onChange」事件的JavaScript函數觸發,該事件應該已經工作。但是這種方式並沒有按照我的想法工作,因爲每次點擊梭子上的每一次點擊都會產生「onChange」事件,我只需要移動「其他人」的值就可以實現它(可以通過兩種方式完成:雙擊或由於點擊飛梭上的箭頭圖標)。

所以問題是:如何在「主 - 細節」邏輯中同步穿梭和文本字段?

p.s.我正在使用Oracle Apex 4.2.6.0003。此外,我知道我可以有一個解決方法,只使用選擇列表,但我想嘗試解決使用穿梭問題,特別是考慮到最後一個可能具有幾乎無限數量的值。

回答

1

使用靜態值作爲航天飛機值列表:

STATIC:A;A,B;B,C;C,Others;OTHERS 

使用jvascript這樣的代碼:

$("#P40_SHUTTLE").change(function(){ 
console.log(apex.item(this).getValue().indexOf("OTHERS") != -1); 
}) 

OTHERS已選擇將返回true(這是在的價值穿梭)。改變是聽取這裏正確的事件!

翻譯是一個DA:

航天飛機上 利用類型的「當」條件「JavaScript表達式」,並使用此代碼的變化:

apex.item(this.triggeringElement).getValue().indexOf("OTHERS") != -1 

然後可以使用真以及DA的虛假行爲,例如根據需要顯示和隱藏文本字段。我不會比前端更進一步。也許爲textfield顯示一個必需的標籤,因爲它只會在顯示字段時顯示。 在文本框中添加服務器端驗證(在提交時),您將檢查穿梭值是否存在OTHERS值。如果它存在,則應該要求文本字段。

在文本框上創建的驗證。 條件類型的 「PLSQL函數體」

DECLARE 
    l_vc_arr2 APEX_APPLICATION_GLOBAL.VC_ARR2; 
BEGIN 
    l_vc_arr2 := APEX_UTIL.STRING_TO_TABLE(:P40_SHUTTLE); 
    FOR z IN 1..l_vc_arr2.count LOOP 
    IF l_vc_arr2(z) = 'OTHERS' THEN 
     RETURN TRUE; 
    END IF; 
    END LOOP; 

    RETURN FALSE; 
END; 

驗證類型:IS NOT NULL
項目:文本字段。

只有當其他人出現在所選值中時,驗證纔會觸發,然後將需要文本字段。

+0

非常感謝,@湯姆!我明白了我的錯誤:我將梭子的價值看作是繩子,而不是數組。 – PiggyInTheMirror