1

APEX 版本:4.1.1.00.23

我有一个穿梭车,它根据从选择列表中选择的内容填充正确的站点。每当从选择列表中选择一个项目时,右侧面板上都会填充正确的一个或多个项目,但始终会添加一个空值。我如何获得空乘?

在此处输入图像描述

Shuttle 名称:P51_Shuttle 选择列表名称:P51_Analyst

这是我的代码: HTML 标头:

<script type="text/javascript">

function LoadRightPane()
{ 
  var objDQAnalyst = document.getElementById("P51_DQ_ANALYST");
  var ajaxRequest = new htmldb_Get(null,&APP_ID.,'APPLICATION_PROCESS=get_DQAttributes',0);
  ajaxRequest.add('P51_DQ_ANALYST',objDQAnalyst.value);
  ajaxResult = ajaxRequest.get();

//alert(ajaxResult);

  if(ajaxResult)
    {  

    var shuttleRight = document.getElementById("P51_SHUTTLE_RIGHT");
      shuttleRight.options.length = 0;
      var attrArray = ajaxResult.split("~colsep~");
      for(var i=0; i < attrArray.length; i++) {
        shuttleRight.options[i] = new Option(attrArray[i], attrArray[i]);
      }
    }
    else
    {
      shuttleRight.options.length = 0;
    }
  ajaxRequest = null; 
} 

function moveitem(item) {
return;
   s_left = document.getElementById("P51_SHUTTLE_TO_LEFT");
   db.transaction(function(tx){
      tx.executeSql('select distinct DQ_ATTRIBUTE from DQ_MANUAL_EDIT where DQ_ANALYST = ?',[item],function(tx,results)
  {
      for (var i=0; i < s_left.options.length;i++)
   {
     if (results.value == s_left.options[i].value) 
     {
         s_left.options[i].selected = true;
         g_Shuttlep_v15.move();
     }
   }
  });
 });
}

</script>

页面 HTML 正文属性:

onLoad="Javascript:LoadRightPane();"

调用的应用程序/页面进程 (get_DQAttributes)

DECLARE

L_RETURN VARCHAR2(2000):= NULL ;

BEGIN

BEGIN

FOR rec IN (    
select distinct dq_attribute 
from DQ_MANUAL_EDIT
where dq_analyst = :P51_DQ_ANALYST
)    
LOOP      
L_RETURN := L_RETURN || rec.dq_attribute || '~colsep~' ;

END LOOP;

end;


htp.prn(L_RETURN);

END;
4

2 回答 2

2

您的 ajax 进程总是返回后缀为~colsep~

当您在 firebug 中运行这样的字符串时:

"test1~colsep~".split("~colsep~")

结果将是一个包含 2 个元素的数组:

["test1", ""]

所以你的 NULL 元素来源于那个。要解决此问题,只需调整 ajax 进程以使用RTRIM修剪最后一个分隔符。

DECLARE
   L_RETURN VARCHAR2(2000):= NULL ;
BEGIN
   FOR rec IN ( select distinct dq_attribute 
                  from DQ_MANUAL_EDIT
                 where dq_analyst = :P51_DQ_ANALYST)    
   LOOP      
      L_RETURN := L_RETURN || rec.dq_attribute || '~colsep~' ;
   END LOOP;
   l_return := rtrim(l_return, '~colsep~');

   htp.prn(L_RETURN);
END;
于 2012-11-12T18:31:02.157 回答
0

关于汤姆的答案的一切都是正确的。我不得不对该行进行一项修改

l_return := rtrim(l_return, '~colsep~');

运行该代码时,最后两个字母将被删除。如果我在穿梭车上有多个物品,第一个可以,但第二个会被切断。例如:使用代码:l_return := rtrim(l_return, '~colsep~'); 梭子的右侧面板看起来像这样

Score
Da

但实际的文字应该是

Score
Data

所以我使用了'substr'函数,现在它正在工作

l_return := substr(l_return,0,(length(l_return)-8));

这是整个代码

DECLARE
   L_RETURN VARCHAR2(2000):= NULL ;
BEGIN
   FOR rec IN ( select distinct dq_attribute
                  from DQ_MANUAL_EDIT
                 where dq_analyst = :P51_DQ_ANALYST)    
   LOOP      
      L_RETURN := L_RETURN || rec.dq_attribute || '~colsep~' ;
   END LOOP;
      L_RETURN := substr(l_return,0,(length(l_return)-8));

   htp.prn(L_RETURN);
END;

谢谢汤姆让我的精神球滚滚而来!!!

于 2012-11-13T16:03:44.890 回答