Oracle apex APEX 4.1右侧为空

Oracle apex APEX 4.1右侧为空,oracle-apex,Oracle Apex,APEX版本:4.1.1.00.23 我有一个穿梭机,它根据从选择列表中选择的内容填充正确的站点。无论何时从“选择”列表中选择一个或多个项目,都会在右侧面板上填充正确的项目,但始终会添加空值。我怎样才能搭上空车 航天飞机名称:P51_航天飞机 选择列表名称:P51_分析师 这是我的密码: HTML标题: <script type="text/javascript"> function LoadRightPane() { var objDQAnalyst = document

APEX版本:4.1.1.00.23

我有一个穿梭机,它根据从选择列表中选择的内容填充正确的站点。无论何时从“选择”列表中选择一个或多个项目,都会在右侧面板上填充正确的项目,但始终会添加空值。我怎样才能搭上空车

航天飞机名称:P51_航天飞机 选择列表名称:P51_分析师

这是我的密码: 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>
应用程序/调用的页面进程(获取属性)


ajax进程总是返回一些后缀为
~colsep~

当您运行类似firebug中的字符串时:

"test1~colsep~".split("~colsep~")
结果将是一个包含2个元素的数组:

["test1", ""]
所以你的空元素就是由它产生的。要解决这一问题,只需调整ajax进程,以修剪最后一个分隔符


汤姆回答的一切都是正确的。我不得不对线路做一次修改

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;

谢谢你,汤姆,让我精神饱满

空值在开始时存在,或者每次添加项目时都存在?@Tom添加项目后如何删除空值?您提供的解决方案正在运行。然而,最后两个角色被剪掉了。如果右面板上有一个项目,我会看到:“Sco”而不是“Score”。如果右面板上有两个项目,我将看到“分数”然后是“Da”,而不是“分数”然后是“日期”。有什么想法吗?我看到你已经发布了一个解决方案。有点奇怪,当我从dual运行
选择RTRIM('test~colsep~test2~colsep~','~colsep~')时,正如我所期望的,输出是'test~colsep~test2'。不确定出了什么问题,但你的substr确实是修剪最后一块头发的另一个好方法!
Score
Data
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;