您的位置:首页 > 其它

针对ie6 用层来实现select的title 提示属性 (增加含有滚动条情况的支持)

2010-02-23 09:53 609 查看
//
function opts(selectObj){

if(Browser.ie6 == false){
return;
}

var optDivs=document.createElement("div");
optDivs.className="tbl-container";
var objTable=document.createElement("table");
var objTbody=document.createElement("tbody");
optDivs.style.zIndex = "100";
objTable.style.zIndex = "100";
objTable.width=selectObj.style.width;
objTable.border = "0";
objTable.cellSpacing = "0";
objTable.cellPadding = "0";
objTable.className = "ctl";

var e = selectObj;
var absTop = e.offsetTop;
var absLeft = e.offsetLeft;
var absWidth = e.offsetWidth;
var absHeight = e.offsetHeight;

while(e = e.offsetParent){
absTop += (e.offsetTop+0.3);
absLeft += e.offsetLeft;
}

with (objTable.style){
position = "absolute";
top = 0;
left = 0;
border = "1px solid black";
tableLayout="fixed";
wordBreak="break-all";
}

with (optDivs.style){
position = "absolute";
top = (absTop + absHeight) + "px";
left = (absLeft+1) + "px";
tableLayout="fixed";
wordBreak="break-all";
backgroundColor = document.bgColor;
}

var options = selectObj.options;
var val=selectObj.value;

if (options.length > 0){
for (var i = 0; i < options.length; i++){
var newOptDiv = document.createElement("td");
var objRow=document.createElement("tr");
newOptDiv.name=options[i].value;
newOptDiv.innerHTML=options[i].innerHTML;
newOptDiv.title=options[i].title;
newOptDiv.onmouseout = function() {this.className='smouseOut';val=selectObj.value};
newOptDiv.onmouseover = function() {this.className='smouseOver';val=this.name;};
newOptDiv.className="smouseOut";
newOptDiv.style.width=1000;
newOptDiv.style.cursor="default";
newOptDiv.style.fontSize = "12px";

objRow.appendChild(newOptDiv);
objTbody.appendChild(objRow);
}
}

objTbody.appendChild(objRow);
objTable.appendChild(objTbody);
optDivs.appendChild(objTable);
document.body.appendChild(optDivs);

if(objTable.offsetHeight > 120){
optDivs.style.height = 120;
optDivs.style.overflowY = "scroll";
}else{
optDivs.style.height = objTable.offsetHeight;

}

var IfrRef = document.createElement("div");
IfrRef.style.position="absolute";
IfrRef.style.width = optDivs.offsetWidth;
IfrRef.style.height = optDivs.offsetHeight;
IfrRef.style.top = optDivs.style.top;
IfrRef.style.left = optDivs.style.left;
IfrRef.style.backgroundColor = document.bgColor;
document.body.appendChild(IfrRef);

optDivs.focus();
optDivs.onblur=function() {choose(selectObj,val,optDivs,IfrRef)};
}
function choose(objselect,val,delobj,delobj2){
objselect.value=val;
document.body.removeChild(delobj);
document.body.removeChild(delobj2);
}

Browser = (function(ua){
var b = {
msie: /msie/.test(ua) && !/opera/.test(ua),
opera: /opera/.test(ua),
safari: /webkit/.test(ua) && !/chrome/.test(ua),
firefox: /firefox/.test(ua),
chrome: /chrome/.test(ua)
};
var vMark = "";
for (var i in b) {
if (b[i]) { vMark = "safari" == i ? "version" : i; break; }
}
b.version = vMark && RegExp("(?:" + vMark + ")[\\/: ]([\\d.]+)").test(ua) ? RegExp.$1 : "0";

b.ie = b.msie;
b.ie6 = b.msie && parseInt(b.version, 10) == 6;
b.ie7 = b.msie && parseInt(b.version, 10) == 7;
b.ie8 = b.msie && parseInt(b.version, 10) == 8;

return b;
})(window.navigator.userAgent.toLowerCase());
// ]]>

aaaaaaaaaaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
cccccccccccccccccccccccc

aaaaaaaaaaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
cccccccccccccccccccccccc
aaaaaaaaaaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb

加入了对数据太多,增加含有滚动条的支持。。。。把样式的一部分从js里面拿出来设置。这里采用了consatan提供的样式.同时也为了方便使用者自定义自己的样式。

因为只有ie6没有在option 里面支持title属性,所以其他浏览器直接忽略了。(code里面判断了浏览器)

代码

<HTML>
<HEAD>
</HEAD>
<BODY>

<STYLE>
.tbl-container {
position:relative;border:2px solid red;width:100px;overflow:hidden;margin:0px;
font-Family:Verdana, Arial, Helvetica, sans-serif;
}
.smouseOut {
background: document.bgColor;
color: #000000;
}
.smouseOver {
background: rgb(0,128,128);
color: #FFFFFF;
cursor: pointer;
}
.ctl{ table-layout:fixed ;top:0;}
.ctl td{text-overflow:ellipsis;overflow:hidden;white-space: nowrap;padding:2px}
</style>

<SCRIPT language="javascript">

function opts(selectObj){

if(Browser.ie6 == false){
return;
}

var optDivs=document.createElement("div");
optDivs.className="tbl-container";
var objTable=document.createElement("table");
var objTbody=document.createElement("tbody");
optDivs.style.zIndex = "100";
objTable.style.zIndex = "100";
objTable.width=selectObj.style.width;
objTable.border = "0";
objTable.cellSpacing = "0";
objTable.cellPadding = "0";
objTable.className = "ctl";

var e = selectObj;
var absTop = e.offsetTop;
var absLeft = e.offsetLeft;
var absWidth = e.offsetWidth;
var absHeight = e.offsetHeight;

while(e = e.offsetParent){
absTop += (e.offsetTop+0.3);
absLeft += e.offsetLeft;
}

with (objTable.style){
position = "absolute";
top = 0;
left = 0;
border = "1px solid black";
tableLayout="fixed";
wordBreak="break-all";
}

with (optDivs.style){
position = "absolute";
top = (absTop + absHeight) + "px";
left = (absLeft+1) + "px";
tableLayout="fixed";
wordBreak="break-all";
backgroundColor = document.bgColor;
}

var options = selectObj.options;
var val=selectObj.value;

if (options.length > 0){
for (var i = 0; i < options.length; i++){
var newOptDiv = document.createElement("td");
var objRow=document.createElement("tr");
newOptDiv.name=options[i].value;
newOptDiv.innerHTML=options[i].innerHTML;
newOptDiv.title=options[i].title;
newOptDiv.onmouseout = function() {this.className='smouseOut';val=selectObj.value};
newOptDiv.onmouseover = function() {this.className='smouseOver';val=this.name;};
newOptDiv.className="smouseOut";
newOptDiv.style.width=1000;
newOptDiv.style.cursor="default";
newOptDiv.style.fontSize = "12px";

objRow.appendChild(newOptDiv);
objTbody.appendChild(objRow);
}
}

objTbody.appendChild(objRow);
objTable.appendChild(objTbody);
optDivs.appendChild(objTable);
document.body.appendChild(optDivs);

if(objTable.offsetHeight > 120){
optDivs.style.height = 120;
optDivs.style.overflowY = "scroll";
}else{
optDivs.style.height = objTable.offsetHeight;

}

var IfrRef = document.createElement("div");
IfrRef.style.position="absolute";
IfrRef.style.width = optDivs.offsetWidth;
IfrRef.style.height = optDivs.offsetHeight;
IfrRef.style.top = optDivs.style.top;
IfrRef.style.left = optDivs.style.left;
IfrRef.style.backgroundColor = document.bgColor;
document.body.appendChild(IfrRef);

optDivs.focus();
optDivs.onblur=function() {choose(selectObj,val,optDivs,IfrRef)};
}
function choose(objselect,val,delobj,delobj2){
objselect.value=val;
document.body.removeChild(delobj);
document.body.removeChild(delobj2);
}

Browser = (function(ua){
var b = {
msie: /msie/.test(ua) && !/opera/.test(ua),
opera: /opera/.test(ua),
safari: /webkit/.test(ua) && !/chrome/.test(ua),
firefox: /firefox/.test(ua),
chrome: /chrome/.test(ua)
};
var vMark = "";
for (var i in b) {
if (b[i]) { vMark = "safari" == i ? "version" : i; break; }
}
b.version = vMark && RegExp("(?:" + vMark + ")[\\/: ]([\\d.]+)").test(ua) ? RegExp.$1 : "0";

b.ie = b.msie;
b.ie6 = b.msie && parseInt(b.version, 10) == 6;
b.ie7 = b.msie && parseInt(b.version, 10) == 7;
b.ie8 = b.msie && parseInt(b.version, 10) == 8;

return b;
})(window.navigator.userAgent.toLowerCase());

</SCRIPT>
sdfsfsdf
<select name='selId' size=1   style= 'width:100px' onclick="opts(this);" >
<option value='111' title="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">aaaaaaaaaaaaaaaaaaaaaaaaaaaa</option>
<option value='222' title="bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb">bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb</option>
<option value='3333' title="cccccccccccccccccccccccccccccccc">cccccccccccccccccccccccc</option>

<option value='4444' title="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">aaaaaaaaaaaaaaaaaaaaaaaaaaaa</option>
<option value='55555' title="bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb">bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb</option>
<option value='66666' title="cccccccccccccccccccccccccccccccc">cccccccccccccccccccccccc</option>
<option value='77777' title="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa">aaaaaaaaaaaaaaaaaaaaaaaaaaaa</option>
<option value='88888' title="bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb">bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb</option>
</select>
</BODY>
</HTML>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐