// 主函数,生成ComboBox // 参数:id : ComboBox的ID,可以在后台使用Request取得 // val : ComboBox的初始值 // arrOption: ComboBox的选项数组,可以为单个值,也可以是类似:new Array(new Array('1','z1'),new Array('2','z2')) 或 new Array(new Array('1','z1'),'2') function youbl_ComboBox(id,val,arrOption){ youbl_ComboBox_id = id;
//页面显示的控件就是下面的一个textbox,一个button,一个div,如果要配合自己的页面样式,请在下面修改 var combobox = '<input type="text" name="' + id + '" id="' + id + '" ' + ((val)?'value="'+val+'"':'') + '>';//主要的TextBox combobox +='<input name="Btn' + id + '" id="Btn' + id + '" type="button" value="▼" onclick="youbl_DivStatusChange(\'Div' + id + '\')" ondblclick="youbl_DivStatusChange(\'Div' + id + '\')" style="border:#666666 1px solid;background-color:#c6d6fd; padding-top: 3px;padding-left:0px;height:22px;width:17px;">';//下拉按钮 combobox +='<iframe id="Div' + id + 'Iframe" style="position:absolute; display: none; z-index:98;" frameborder="0"></iframe>';//iframe,用于遮挡Select,以防Div被Select盖住 combobox +='<div id="Div' + id + '" style="overflow:auto;position: absolute; display: none; z-index: 99; background-Color:#ffffff; border:solid 1px #000000;"></div>';//Div,用于显示Option document.write(combobox);
////// 拼接Option,并写入DIV 开始 //////////// var comHead = '<TABLE border="0" cellspadding="0" cellspacing="0" style="width:100%;">'; var comFoot = '</TABLE>'; var comOption = '<tr id="$$trid$$" onclick=\'document.getElementById("$$obj$$").value="$$value$$";youbl_DivStatusChange("Div' + id + '");\' style=\'cursor:default;\' ' + 'onmouseover=\'youbl_onRowOver(this);\' onmouseout=\'youbl_onRowOut(this);\'>' + '<td>$$text$$</td></tr>'; var comAll = comHead; if(arrOption == null || arrOption.length <= 0) comAll += '<tr id="youbl_' + id + 'null"><td style="height:150px;"> </td></tr>'; else if(typeof(arrOption) == 'string'){ comAll += comOption.replace('$$obj$$',id).replace('$$value$$',arrOption).replace('$$text$$',arrOption).replace('$$trid$$','youbl_' + id + '0');//$$trid$$用于删除ComboBox选项 } else{ for(var i=0;i<arrOption.length;i++){ var text,value; if(arrOption[i][0] && arrOption[i].length > 0){ //条件成立表示是数组 text = arrOption[i][0]; if(arrOption[i][1]) value = arrOption[i][1];//如果数组只有一项,那么选项的text和value相同 else value = text; } else text = value = arrOption[i]; //不是数组,选项的text和value相同 comAll += comOption.replace('$$obj$$',id).replace('$$value$$',value).replace('$$text$$',text).replace('$$trid$$','youbl_' + id + i.toString());//$$trid$$用于删除ComboBox选项 } } comAll += comFoot; var div = document.getElementById('Div' + id); div.innerHTML = comAll; if(arrOption.length >= 15){ div.style.height = '310px'; } ////// 拼接Option,并写入DIV 完成 ////////////
//给ComboBox添加方法 var optionLen = arrOption.length;//用于设定新增选项的序号,相当于SelectedIndex,用于删除Option用 var combox = document.getElementById(id);
//该方法实现新增Option,可以不传参数,也可以传递1个参数,或2个参数(第1个是text,第2个是value) combox.add = function(){ //如果开始没有选项,则先清除空的那个项 var removeOp = document.getElementById('youbl_' + id + 'null'); if(removeOp) removeOp.parentNode.removeChild(removeOp);
var text=' ',value=''; if(arguments[0])//如果只有一个参数,新Option的文本和值相同 text = value = arguments[0]; if(arguments[1]) value = arguments[1]; div.innerHTML = div.innerHTML.replace('</TABLE>',comOption.replace('$$obj$$',id).replace('$$value$$',value).replace('$$text$$',text).replace('$$trid$$','youbl_' + id + optionLen.toString()) + '</table>'); optionLen++; }
這么久了,我怎么沒遇到樓主說的這種情況呢... 寬度不是根據內容來變的麼.? 學習 ing...
比方说
<select style="width:400">
<option value="">adfdfdffsdfdfdfdsfsdfsdafdsfsd
<option value="">323546565756
<option value="">2loiuarcticoeidlelweox
<option value="">44444
</select>
<select style= "width:150">
<option value= " "> 2loiuarcticoeidlelweox
<option value= " "> 323546565756
<option value= " "> adfdfdffsdfdfdfdsfsdfsdafdsfsd
<option value= " "> 44444
</select>
<option value= " "> adfdfdffsdfdfdfdsfsdfsdafdsfsd
<option value= " "> 323546565756
<option value= " "> 2loiuarcticoeidlelweox
<option value= " "> 44444
</select>去掉style= "width:400"将会按最长的显示不知道lz想要什么呢
<option value= " "> adfdfdffsdfdfdfdsfsdfsdafdsfsd
<option value= " "> 323546565756
<option value= " "> 2loiuarcticoeidlelweox
<option value= " "> 44444
</select>
<option value= " "> adfdfdffsdfdfdfdsfsdfsdafdsfsd
<option value= " "> 323546565756
<option value= " "> 2loiuarcticoeidlelweox
<option value= " "> 44444
</select>
150是固定在页面显示的 我想要下面的拉长显示全部 你们去看firefox浏览器下就是这样
但在ie下就不好用
在Select上悬停,可以实现。
这是什么意思????
解释下
这个拿到firefox浏览器下就正好符合我的要求
就是说 上面菜单固定后 下拉后的数据根据数据的长度调整的
但不知道为什么ie就不好用
不过想不出解决办法
奇怪firefox竟然可以
不过Option不支持事件,只有Select支持事件,你可以在Select的onMouseOver时弹出一个提示,不过跟你的要求也不太符合。
或者自己写个自定义控件
或者自己写个自定义控件
-----------------------------------------------------
都说了不能调宽 布局就是这样的
怎么写个子定义控件#24 具体点
教教我~~~~`
<option value= " "> adfdfd
<option value= " "> 323546565756
<option value= " "> 2loi
<option value= " "> 44444
</select>
------------
JK注:
expression是for ie的
min-width是for ff的
<html>
<head>
</head>
<body>
<script language='javascript' type='text/javascript'>
var arrOption = new Array(new Array('1','z1'),new Array('2','z2'),new Array('3','z3'));//要写入的Option
youbl_ComboBox('comboBoxTest1','','');//调用生成ComboBox
youbl_ComboBox('comboBoxTest2','','');//调用生成ComboBox var youbl_ComboBox_id;//用于存储ComboBox的ID
// document.onclick方法 用于单击页面其它地方时,取消ComboBox选项的显示,
// 如果重写这个方法,记得把这个方法的内容添加到重写的方法中。
function document.onclick(){
if(window.event.srcElement != document.getElementById('Btn' + youbl_ComboBox_id) ) youbl_DivHidden('Div' + youbl_ComboBox_id);
}
// 主函数,生成ComboBox
// 参数:id : ComboBox的ID,可以在后台使用Request取得
// val : ComboBox的初始值
// arrOption: ComboBox的选项数组,可以为单个值,也可以是类似:new Array(new Array('1','z1'),new Array('2','z2')) 或 new Array(new Array('1','z1'),'2')
function youbl_ComboBox(id,val,arrOption){
youbl_ComboBox_id = id;
//页面显示的控件就是下面的一个textbox,一个button,一个div,如果要配合自己的页面样式,请在下面修改
var combobox = '<input type="text" name="' + id + '" id="' + id + '" ' + ((val)?'value="'+val+'"':'') + '>';//主要的TextBox
combobox +='<input name="Btn' + id + '" id="Btn' + id + '" type="button" value="▼" onclick="youbl_DivStatusChange(\'Div' + id + '\')" ondblclick="youbl_DivStatusChange(\'Div' + id + '\')" style="border:#666666 1px solid;background-color:#c6d6fd; padding-top: 3px;padding-left:0px;height:22px;width:17px;">';//下拉按钮
combobox +='<iframe id="Div' + id + 'Iframe" style="position:absolute; display: none; z-index:98;" frameborder="0"></iframe>';//iframe,用于遮挡Select,以防Div被Select盖住
combobox +='<div id="Div' + id + '" style="overflow:auto;position: absolute; display: none; z-index: 99; background-Color:#ffffff; border:solid 1px #000000;"></div>';//Div,用于显示Option
document.write(combobox);
////// 拼接Option,并写入DIV 开始 ////////////
var comHead = '<TABLE border="0" cellspadding="0" cellspacing="0" style="width:100%;">';
var comFoot = '</TABLE>';
var comOption = '<tr id="$$trid$$" onclick=\'document.getElementById("$$obj$$").value="$$value$$";youbl_DivStatusChange("Div' + id + '");\' style=\'cursor:default;\' ' +
'onmouseover=\'youbl_onRowOver(this);\' onmouseout=\'youbl_onRowOut(this);\'>' +
'<td>$$text$$</td></tr>';
var comAll = comHead;
if(arrOption == null || arrOption.length <= 0)
comAll += '<tr id="youbl_' + id + 'null"><td style="height:150px;"> </td></tr>';
else if(typeof(arrOption) == 'string'){
comAll += comOption.replace('$$obj$$',id).replace('$$value$$',arrOption).replace('$$text$$',arrOption).replace('$$trid$$','youbl_' + id + '0');//$$trid$$用于删除ComboBox选项
}
else{
for(var i=0;i<arrOption.length;i++){
var text,value;
if(arrOption[i][0] && arrOption[i].length > 0){ //条件成立表示是数组
text = arrOption[i][0];
if(arrOption[i][1])
value = arrOption[i][1];//如果数组只有一项,那么选项的text和value相同
else
value = text;
} else
text = value = arrOption[i]; //不是数组,选项的text和value相同
comAll += comOption.replace('$$obj$$',id).replace('$$value$$',value).replace('$$text$$',text).replace('$$trid$$','youbl_' + id + i.toString());//$$trid$$用于删除ComboBox选项
}
}
comAll += comFoot;
var div = document.getElementById('Div' + id);
div.innerHTML = comAll;
if(arrOption.length >= 15){
div.style.height = '310px';
}
////// 拼接Option,并写入DIV 完成 ////////////
//给ComboBox添加方法
var optionLen = arrOption.length;//用于设定新增选项的序号,相当于SelectedIndex,用于删除Option用
var combox = document.getElementById(id);
//该方法实现新增Option,可以不传参数,也可以传递1个参数,或2个参数(第1个是text,第2个是value)
combox.add = function(){
//如果开始没有选项,则先清除空的那个项
var removeOp = document.getElementById('youbl_' + id + 'null');
if(removeOp)
removeOp.parentNode.removeChild(removeOp);
var text=' ',value='';
if(arguments[0])//如果只有一个参数,新Option的文本和值相同
text = value = arguments[0];
if(arguments[1])
value = arguments[1];
div.innerHTML = div.innerHTML.replace('</TABLE>',comOption.replace('$$obj$$',id).replace('$$value$$',value).replace('$$text$$',text).replace('$$trid$$','youbl_' + id + optionLen.toString()) + '</table>');
optionLen++;
}
//该方法实现删除Option,参数1(必须)目前只支持数字,删除该项Option(从0开始)
combox.remove = function(){
if(arguments.length <= 0)return;
var removeOp = document.getElementById('youbl_' + id + arguments[0]);
if(removeOp){
removeOp.parentNode.removeChild(removeOp);
}
}
}//end youbl_ComboBox
// 隐藏Div和相应的Iframe
function youbl_DivHidden(id)
{
var obj = document.getElementById(id);
if(obj && obj.style)obj.style.display = 'none';
youbl_processIframe(obj); //隐藏相应的Iframe
} // 转换Option Div的状态,原来显示变为隐藏,原来隐藏变为显示
function youbl_DivStatusChange(id)
{
var obj = document.getElementById(id);
if(obj && obj.style){
if(obj.style.display == 'none'){
obj.style.display = '';
//var e = window.event.srcElement;
var e = document.getElementById(id.substring(3)); //div的ID是Div加Txt的Name,所以取3位之后。
obj.style.top = e.offsetTop + document.body.scrollTop + 22;
obj.style.left= e.offsetLeft + document.body.scrollLeft;
//obj.style.top = e.getBoundingClientRect().top + document.body.scrollTop;
//obj.style.left= e.getBoundingClientRect().left + document.body.scrollLeft;
obj.style.width = e.clientWidth;
}
else
obj.style.display = 'none';
youbl_processIframe(obj);//处理相应的Iframe
}
}
// 隐藏Iframe
function youbl_processIframe(obj){
if(obj && obj.style && obj.id){
var IfrRef = document.getElementById(obj.id + 'Iframe');
if(IfrRef && IfrRef.style){
IfrRef.style.display = obj.style.display;
if(IfrRef.style.display != 'none'){
IfrRef.style.width = obj.offsetWidth;
IfrRef.style.height = obj.offsetHeight;
IfrRef.style.top = obj.style.top;
IfrRef.style.left = obj.style.left;
//IfrRef.style.top = obj.offsetTop;
//IfrRef.style.left = obj.offsetLeft;
IfrRef.style.zIndex = obj.style.zIndex - 1;
}
}
}
}
// 下面的2个变量和方法,用于鼠标进入、离开或点击时,改变行的颜色
// 注意:下面2个颜色必须小写
var youbl_colorOver = '#316ac5';//鼠标进入时行的颜色
var youbl_colorOut = '#ffffff';//鼠标离开时行的颜色
function youbl_onRowOver(row){
row.color = row.style.backgroundColor;//保存旧的背景色
row.style.backgroundColor = youbl_colorOver;
}
function youbl_onRowOut(row){
if(row.color) //如果保存了原来的背景色,就使用原来的背景色
row.style.backgroundColor = row.color;
else //否则使用上面设置的背景色
row.style.backgroundColor = youbl_colorOut;
}
</script><hr><input name="add1">
<input type=button onclick="aaa()">
<script language="javascript">
function aaa(){
var obj = document.getElementById('comboBoxTest');
obj.add(document.all.add1.value);
//obj.remove(1);
}
</script>
<HR>
<textarea name='t1'></textarea><br>
<textarea name='t2'></textarea>
</body>
</html>
-----
是“不行”的方法,
不过有可能是最后“用”的方法。另外,“上面已经固定了”本身就有表意不清:如果选了一个很长的值,上面还固定吗?
-------------------------------------------------------------------------------
首先 这么热心非常感谢 但是你根本没有理解我的意思 也是没有看看我发帖和回答其他人所表达的 后来我实在是不愿意多写那些话来重复的告诉你们是个什么样的情况
第一,下拉菜单已经固定长度的放在页面里,看我发的代码 <select style= "width:150 "> 就是说明固定长度
第二,我是想让他下拉后显示的数据能完整,而且这些数据是未知的从数据库读出来的,如果你有firefox浏览器可以看看他所实现的效果
所以,您的方法明显不行是打破了页面的布局,如同第一,第一个排除的就是这种方法,希望这次能理解 谢谢
速度比较慢,下拉菜单还是会放大缩小
是什么做的呢 教教我
或者把原代码发给我
[email protected]
非常感谢
不一定用SELECT
如果你肯出多点分。。我帮你搞
更不是像某些人为了利益而产生的道德的败坏
我还是相信web发展到现在,资源共享,仍然是他最大的亮点
30楼想赚分,不知道分有什么用处呢?能当Money吗?
31楼把分当成了钱(利益),上升到了道德的高度。再一次汗。