`
ritaleo
  • 浏览: 103160 次
  • 来自: ...
社区版块
存档分类
最新评论

可输入的下拉框

阅读更多
var Select = {
	isOpera :(navigator.userAgent.toLowerCase().indexOf('opera') != -1),
	isIE : (navigator.userAgent.toLowerCase().indexOf('msie') != -1 && !this.isOpera),
	isIE6 : (navigator.userAgent.toLowerCase().indexOf("msie 6.0") != -1),
	isSafari : (navigator.userAgent.toLowerCase().indexOf('safari') != -1),
	getElementPos : function(el){
		if (el.parentNode === null || el.style.display == 'none') {
			return false;
		}
		var parent = null;
		var pos = [];
		var box;
		if (el.getBoundingClientRect) { // IE
			box = el.getBoundingClientRect();
			var scrollTop = Math.max(document.documentElement.scrollTop,document.body.scrollTop);
			var scrollLeft = Math.max(document.documentElement.scrollLeft,document.body.scrollLeft);
			return {
				x : box.left + scrollLeft,
				y : box.top + scrollTop
			};
		} else if (document.getBoxObjectFor) { // gecko
			box = document.getBoxObjectFor(el);
			var borderLeft = (el.style.borderLeftWidth)	? parseInt(el.style.borderLeftWidth): 0;
			var borderTop = (el.style.borderTopWidth)? parseInt(el.style.borderTopWidth): 0;
			pos = [box.x - borderLeft, box.y - borderTop];
		} else { // safari & opera
			pos = [el.offsetLeft, el.offsetTop];
			parent = el.offsetParent;
			if (parent != el) {
				while (parent) {
					pos[0] += parent.offsetLeft;
					pos[1] += parent.offsetTop;
					parent = parent.offsetParent;
				}
			}
			if (this.isOpera|| (this.isSafari && el.style.position == 'absolute')) {
				pos[0] -= document.body.offsetLeft;
				pos[1] -= document.body.offsetTop;
			}
		}
		if (el.parentNode) {
			parent = el.parentNode;
		} else {
			parent = null;
		}
		while (parent && parent.tagName != 'BODY' && parent.tagName != 'HTML') { 
			pos[0] -= parent.scrollLeft;
			pos[1] -= parent.scrollTop;
			if (parent.parentNode) {
				parent = parent.parentNode;
			} else {
				parent = null;
			}
		}
		return {
			x : pos[0],
			y : pos[1]
		};
	},
	inittextfield : function(el){
		var selectWidth = el.offsetWidth;
		textfield = document.createElement("input");
		var txtid = "txt"+ el.id;
		textfield.id = txtid;
		textfield.style.zIndex = "99999";
		if (el.value == "") {
			textfield.value = "输入或选择";
			textfield.style.color = "#ccc";
		} else {
			textfield.value = el.value;
		}
		textfield.style.position = "absolute";
		textfield.style.top = this.getElementPos(el).y + "px";
		textfield.style.left = this.getElementPos(el).x + "px";
		textfield.style.border = "none";
		if (this.isSafari) {
			var selectButtonWidth = 18;
			textfield.style.marginTop = "0px";
			textfield.style.marginLeft = "0px";
		} else if (this.isOpera) {
			var selectButtonWidth = 27;
			textfield.style.marginTop = "4px";
			textfield.style.marginLeft = "4px";
		} else {
			if(this.isIE6)
				this.initIframe(el);
			var selectButtonWidth = 27;
			textfield.style.marginTop = "2px";
			textfield.style.marginLeft = "3px";
		}
		textfield.style.width = (selectWidth - selectButtonWidth) + "px";
		el.parentNode.appendChild(textfield);
		el.onchange = function() {
			val = this.options[this.selectedIndex].value;
			document.getElementById(txtid).value = val;
		}
		el.onfocus = function() {
			document.getElementById(txtid).style.color = "#333";
		}
		textfield.onfocus = function() {
			this.style.color = "#333";
			this.select();
		}
		textfield.onchange = function() {
			el.options[0].value = el.options[0].text = document.getElementById(txtid).value;
			el.options[0].selected = true;
		}
	},
	//解决IE6下面的问题
	initIframe : function(el) {
		var textWidth = el.offsetWidth;
		var textHeight = el.offsetHeight;
		var hackFrame = document.createElement("iframe");
		hackFrame.setAttribute("src", "about:blank");
		hackFrame.setAttribute("scrolling", "0");
		hackFrame.setAttribute("tabindex", "-1");
		hackFrame.id = "frame" + el.name;
		hackFrame.style.position = "absolute";
		hackFrame.style.width = textWidth -25+ "px";
		hackFrame.style.height = textHeight-5 + "px";
		hackFrame.style.top = this.getElementPos(el).y + "px";
		hackFrame.style.left = this.getElementPos(el).x + "px";
		hackFrame.style.marginTop = "3px";
		hackFrame.style.marginLeft = "3px";
		el.parentNode.insertBefore(hackFrame, el);
	}
}



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>可输入的下拉框 - clone(http://hi.baidu.com/hulk168)</title>
<script type="text/javascript" src="select.js" charset="gb2312"></script>
</head>
<body>




<select id="user_fromto" style="width: 90px;">
	<option value=""></option>
	<option value="北京">北京</option>
	<option value="上海">上海</option>
	<option value="广州">广州</option>
	<option value="深圳">深圳</option>
	<option value="重庆"  >重庆</option>
	<option value="武汉">武汉</option>
	<option value="成都">成都</option>
	<option value="长沙">长沙</option>
	<option value="济南">济南</option>
	<option value="大连">大连</option>
	<option value="杭州">杭州</option>
	<option value="苏州">苏州</option>
</select>
     
	 
<select id="user_fromto1" style="width: 90px;">
  <option value=""></option>
  <option value="上海">上海</option>
  <option value="广州">广州</option>
  <option value="深圳">深圳</option>
  <option value="重庆">重庆</option>
  <option value="武汉">武汉</option>
  <option value="成都">成都</option>
  <option value="长沙">长沙</option>
  <option value="济南">济南</option>
  <option value="大连">大连</option>
  <option value="杭州">杭州</option>
  <option value="苏州">苏州</option>
</select>

<script type="text/javascript">
window.onload = function(){
	Select.inittextfield(document.getElementById("user_fromto"));
	Select.inittextfield(document.getElementById("user_fromto1"));
}
</script>
</body>
</html>

分享到:
评论

相关推荐

    js 可输入下拉框(jquery)

    在JavaScript和jQuery的世界里,"js 可输入下拉框(jquery)"是一个常见的交互设计需求,它结合了传统下拉框的简洁性与输入框的搜索功能,为用户提供更友好的交互体验。这种组件通常被称为“Autocomplete”或...

    可输入下拉框(html控件)

    简单javavscript实现的可输入下拉框(仿VC的comobox),用于html网页开发。 不懂代码的,可直接在页面中插入该源码实现,方便易用。

    可输入下拉框(select)源代码

    在网页设计中,"可输入下拉框"(通常称为Autocomplete或Typeahead下拉框)是一种增强用户体验的交互元素。传统的HTML `&lt;select&gt;` 标签仅允许用户从预定义的选项中选择,但可输入下拉框允许用户在输入时获取匹配建议...

    两种方式生成可输入下拉框。

    以上就是两种创建可输入下拉框的方法。在实际项目中,可以根据需求和兼容性考虑选用合适的方式。同时,我们可以通过CSS来定制样式,使交互更加友好和美观。记得在开发过程中,始终以用户为中心,提供流畅、直观的...

    asp.net可输入下拉框

    将CheckBox Text两个空间结合,简易的制作可输入下拉框

    这是一个可输入下拉框组件

    开发者可能会利用库或框架,如React、Vue或Angular,它们提供了丰富的组件库,包括可输入下拉框的实现。这些框架允许开发者通过简单的配置和API调用来实现复杂的功能,比如事件监听、数据绑定和动态过滤。 在实际...

    comBox可输入下拉框

    在IT行业中,"comBox可输入下拉框"是一种常见的用户界面组件,它结合了文本输入框和下拉选择框的功能。这样的设计旨在提供更灵活的用户体验,允许用户既可以手动输入值,也可以从预设的选项中进行选择。在网页开发中...

    可输入下拉框可输入下拉框

    标题中的“可输入下拉框”通常指的是在网页或应用程序设计中的一种交互元素,它结合了文本输入框和下拉列表的功能。用户可以既可以直接在输入框中输入文本,也可以从下拉列表中选择已有选项,这种设计常用于提供用户...

    可输入下拉框的源码以及demo (2008)

    在IT行业中,"可输入下拉框"是一种常见的交互元素,它结合了传统下拉列表与文本输入框的功能,让用户可以既从预设选项中选择,又可以直接输入自定义值。这种控件在网页和应用程序设计中十分常见,因为它们提高了用户...

    可输入下拉框jquery插件

    本文将详细介绍"可输入下拉框jQuery插件"的相关知识点。 首先,jQuery是一种广泛使用的JavaScript库,它简化了DOM操作、事件处理、动画和Ajax交互。在本插件中,jQuery起到了核心作用,通过它的API和方法实现了...

    jQuery插件集之(可输入下拉框)N多例子+Demo

    本主题聚焦于一个特定的jQuery插件,即“可输入下拉框”插件,它提供了丰富的功能,如自动完成和模糊查询,极大地提升了用户在网页上的交互体验。 首先,我们要理解什么是“可输入下拉框”。传统的HTML下拉框(`...

    php可输入下拉框控件

    二、可输入下拉框控件 为了实现一个可输入的下拉框,我们可以利用JavaScript或者jQuery库来增强原生的HTML下拉框。这样的控件允许用户在输入框中直接键入文本,同时仍然提供下拉列表供用户选择。当用户开始输入时,...

    asp.net可输入可选择下拉框

    在这种情况下,“asp.net可输入可选择下拉框”应运而生,它结合了文本框和下拉框的优点,提供了更灵活的交互体验。 首先,我们需要理解这个自定义用户控件的工作原理。通常,它是通过JavaScript或者jQuery在客户端...

    可输入下拉框html实例

    利用input框和select框的组合设计的可输入下拉框,并支持键盘按钮实现上下移动。

    仿百度google的自动搜索可输入下拉框

    仿百度google的自动搜索可输入下拉框, 本人开发的, 网上的都不好用,郁闷,提手花了一天半呢

    可输入的下拉框.rar

    4. Vue.js、React等前端框架:它们提供了组件化开发方式,也有对应的可输入下拉框组件。 五、代码示例 以下是一个使用纯JavaScript实现的简单例子: ```html &lt;option value="option1"&gt;Option 1 ...

Global site tag (gtag.js) - Google Analytics