如何检查下拉列表是否只读?

时间:2014-05-07 07:11:05

标签: javascript jquery dojo xpages

我想检查下拉列表是否只读。我在我的xpage内有重复控制的下拉列表,根据某些条件,我的一个下拉列表将是readonly。我想用CSJS(javascript,jquery,dojo)检查哪一个是readonly

4 个答案:

答案 0 :(得分:1)

你可以用几种方式使用jquery:

第一道:

if($('select').attr('disabled'))
{
    alert("read only");
}

Fiddle Example

第二路:

  if($('select').is(':disabled'))
     {
       alert("read only");
     }

第三种方式:

if($('select').attr('readonly'))
    {
        alert("read only");
    }

答案 1 :(得分:1)

假设您的下拉列表是类型为xp:combobox的XPage控件,您可以执行以下操作以使用服务器端逻辑检查控件是否只读:

getComponent("<id of combobox>").isReadonly()

正如您自己提到的,XPage中的只读组合框不会呈现为下拉列表,而是呈现为具有组合框ID的表格。

答案 2 :(得分:0)

尝试使用jQuery方法:

alert($('select[readonly]').attr('id')); 
// alerts the id of readonly select element

如果有多个只读选择元素,那么您可以使用.map()方法将ID存储在数组中:

var readOnly = $('select[readonly]').map(function(){
    return this.id;
}).get();

Demo @ fiddle with readonly attribute.

或者如果您的意思是disabled,那么您可以更改为此脚本:

alert($('select[disabled]').attr('id')); 

var readOnly = $('select[disabled]').map(function(){
    return this.id;
}).get();

答案 3 :(得分:0)

正如我们所知,XPage中的只读组合框不是作为下拉列表呈现的,而是作为具有组合框ID的表。 如果我们尝试将一些值设置为readonly下拉列表,则它将不可见,因为readonly下拉列表呈现为表,并且该表具有value属性。

所以,我在运行时创建了一个span元素,用我的组合框的id显示我的只读组合框值,并使用dropdown的visible属性而不是readonly属性,这样就不会创建偶数表。

function setValues()
{
 //START OF CODE: Set values on dialog      
 var RepID = "#{id:repeatControlID}"
 var totalcont = "#{javascript:getComponent('repeatControlID').getRowCount()}";

 var val = "#{javascript: DataSourceObj.getItemValue('docField')}"

 for(i=0;i<val.length;i++)
 {  
   var idChL = RepID+":"+i+":comboboxID"; 
   var cbCell = RepID+":"+i+":cbCell"; //cbCell is my id of table cell in which my combobox is present
   var element = document.getElementById(idChL);            
   if(element) //Check if dropdown is rendered, if not then create element on fly
   {
 element.value = val;
   }
   else{        
  createEle(idChL,cbCell,val);
   }                
 }      
 //END OF CODE: Set values on dialog
}   

function createEle(idText,cbCell,idVal)
{
    var input = document.createElement("span");
    input.innerText = idVal;
    input.id = idText;
    var parentEle = document.getElementById(cbCell);
    parentEle.appendChild(input);
}