去年12月份挑错经验总结
接手别人做了一半的项目时,由于不了解会犯个种问题,以下12月份个人出bug及学习总结的情况,高手见笑了
IFrame部分:
Iframe标记的使用格式是:
<Iframe src="URL" width="x" height="x" scrolling="[OPTION]" frameborder="x"></iframe>
src:文件的路径,既可是HTML文件,也可以是文本、ASP等;
width、height:"画中画"区域的宽与高;
scrolling:当SRC的指定的HTML文件在指定的区域不显不完时,滚动选项,如果设置为NO,则不出现滚动条;如为Auto:则自动出现滚动
条;如为Yes,则显示;
FrameBorder:区域边框的宽度,为了让'画中画'与邻近的内容相融合,常设置为0。
比如:
<Iframe src="http://netschool.cpcw.com/homepage" width="250" height="200" scrolling="no" frameborder="0"></iframe>
二、父窗体与浮动帧之间的相互控制
在脚本语言与对象层次中,包含Iframe的窗口我们称之为父窗体,而浮动帧则称为子窗体,弄清这两者的关系很重要,因为要在父窗体
中访问子窗体或相反都必须清楚对象层次,才能通过程序来访问并控制窗体。
1、在父窗体中访问并控制子窗体中的对象
在父窗体中,Iframe即子窗体是document对象的一个子对象,可以直接在脚本中访问子窗体中的对象。
现在就有一个问题,即,我们怎样来控制这个Iframe,这里需要讲一下Iframe对象。当我们给这个标记设置了ID 属性后,就可通过文档
对象模型DOM对Iframe所含的HTML进行一系列控制。
比如在example.htm里嵌入test.htm文件,并控制test.htm里一些标记对象:
<Iframe src="test.htm" id="test" width="250" height="200" scrolling="no" frameborder="0"></iframe>
test.htm文件代码为:
<html>
<body>
<h1 id="myH1">hello,my boy</h1>
</body>
</html>
如我们要改变ID号为myH1的H1标记里的文字为hello,my dear,则可用:
document.myH1.innerText="hello,my dear"(其中,document可省)
在example.htm文件中,Iframe标记对象所指的子窗体与一般的DHTML对象模型一致,对对象访问控制方式一样,就不再赘述。
2、在子窗体中访问并控制父窗体中对象
在子窗体中我们可以通过其parent即父(双亲)对象来访问父窗口中的对象。
如example.htm:
<html>
<body onclick="alert(tt.myH1.innerHTML)">
<Iframe name="tt" src="frame1.htm" width="250" height="200" scrolling="no" frameborder="0"></iframe>
<h1 id="myH2">hello,my wife</h1>
</body>
</html>
如果要在frame1.htm中访问ID号为myH2中的标题文字并将之改为"hello,my friend",我们就可以这样写:
parent.myH2.innerText="hello,my friend"
这里parent对象就代表当前窗体(example.htm所在窗体),要在子窗体中访问父窗体中的对象,无一例外都通过parent对象来进行。
Iframe虽然内嵌在另一个HTML文件中,但它保持相对的独立,是一个'独立王国'哟,在单一HTML中的特性同样适用于浮动帧中。
试想一下,通过Iframe标记,我们可将那些不变的内容以Iframe来表示,这样,不必重复写相同的内容,这有点象程序设计中的过程或
函数,减省了多少繁琐的手工劳动!另外,至关重要的是,它使页面的修改更为可行,因为,不必因为版式的调整而修改每个页面,你只需
修改一个父窗体的版式即可了。
有一点要注意,Nestscape浏览器不支持Iframe标记,但在时下IE的天下,这似乎也无大碍,广泛采用Iframe标记,既为自己
三、IFrame也可以编辑文字
有没有想过除了表单(<form>)之外还有其它的网页元素可以编辑文字呢?只要使用IFrame的隐藏的一个属性就可以使IFrame成为一个文本编辑器。
<html>
<body onload="editer.document.designMode='On'">
<IFrame ID="editer"></IFrame>
</body>
</html>
其中designMode属性表示IFrame的设计模式的状态(开/关),还在犹豫什么呢,快试试吧!
只要巧妙的利用这一特性就可以制作很多意想不到的效果。如果下面我们来做一个图片编辑器。
<html>
<body onload="imgEditer.document.designMode='On';imgEditer.document.write('<img src=图片.gif>')">
<IFrame id="imgEditer"></IFrame>
</body>
</html>
小结:
根据我自己的学习体验,我总结了几点学习方法供大家参考:
1、看到好的网页,可以在浏览器的“编辑”菜单中选择“源文件”,这时我们就可以看到源程序,学习别人制作网页的一些方法、技巧和一些特殊或新的HTML标记,有时候通过这种办法可以学到书本上没有的东西
2、多练习,在做普通的页面时候尽量手写HTML标记(比如在计事本中)
3、对于难记的属性不必强行记忆,在用到的时候翻一下语法手册,多用几次就会熟练掌握了。
ssh集成
SSH集成环境的配置 + mysql (开发环境MyEclipse)
Author:mikelfee
项目开发时的层次关系:
表示层--->业务层--->持久层----------->数据库
Struts: 表示层 MVC框架,struts主要实现了MVC框架中的C<控制>
Hibernate: 持久层 O/R映射框架,解决阻抗不匹配 (不适合做聚集性的操作,如批量的修
改和删除)
Spring: 业务逻辑层 轻量级容器框架,IoC实现了控制反转以及aop提供了声明式事物服
务,对很多框架提供了集成
这三个框架的学习顺序: Struts-->Hibernate-->Spring
为了便于描述所以给出了特定的版本号,其他版本以此类推:
* Spring: spring-2.0
* Struts: struts-1.x (大家都知道struts-2.x实际上可以说是是Webwork的升
级,比struts1.x轻量级)
* Hibernate: hibernate-3.2.0
还需要一些工具包:
* jstl (标签库,需要另外下载)
* 数据库的jdbc驱动 (这里以mysql为数据库,也需要另外下载)
注意如果拷贝jar包时,有重复的就选高版本的jar包
Spring的环境配置:
* spring依赖库添加到WEB-INF/lib下
* spring_home/dist/spring.jar
* spring_home/lib/jakarta-commons/commons-logging.jar
* spring_home/lib/log4j/log4j-1.2.14.jar
* spring_home/lib/aspectj/*.jar
* spring_home/lib/cglib/*.jar
(可选,cglib可以对没有实现接口的目标对象生成动态代理,
但是一般情况下还是选用jdk的默认动态代理就可以了,
即建议对业务逻辑层进行实现接口模式编程)
* 拷贝spring配置文件(applicationContext.xml)到src下 (classpath的根)
* 拷贝log4j配置文件(log4j.properties)到src下 (也可用.xml的配置文件)
Struts的环境配置:
* struts依赖库添加到WEB-INF/lib下
* struts_home/lib/*.jar
* jstl标签库 (jstl_home/lib/*.jar)
* 修改web.xml文件,配置ActionServelet
* 拷贝struts配置文件(struts-config.xml)到WEB-INF下
* 提供国际化资源文件, 拷贝MessageResources.properties到src下
Hibernate的环境配置:
* hibernate依赖库添加到WEB-INF/lib下
* hibernate_home/hibernate3.jar
* hibernate_home/lib/*.jar
* mysql的jdbc驱动 (mysql-connector-java-3.1.14-bin.jar)
* 拷贝hibernate配置文件(hibernate.cfg.xml)到src下
* 拷贝log4j配置文件(log4j.properties)到src下
(如果和上面重复,就只选取一个)
* 拷贝映射文件xxx.hbm.xml (映射实体到数据库所需要的映射文件)
为了便于各部分的工作以及他们的集成,各配置文件的基本配置如下:
* Struts配置文件的配置<补充>
* 在web.xml中配置struts的ActionServlet
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>
org.apache.struts.action.ActionServle
t
</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>
/WEB-INF/struts-config.xml
</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>2</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>2</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<!-- Standard Action Servlet Mapping -->
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
* struts-config.xml中的配置
* 要有国际化标签 basename (注意标签的顺序)
<message-resources parameter="MessageResources" />
( <form-beans> 在 <action-mappings> 前面 )
( <action-mappings> 在 <message-resources> 后面 )
* Hibernate配置文件的配置<补充>
* hibernate.cfg.xml中配置
* 数据库的配置
<property name="hibernate.connection.url">
jdbc:mysql://localhost/spring_struts_hibernate
</property>
<property name="hibernate.connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="hibernate.connection.username">
root
</property>
<property name="hibernate.connection.password">
mikelfee
</property>
<property name="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</property>
* 为了便于调试配置sql输出语句
<property name="hibernate.show_sql">true</property>
* tomcat启动时会自动创建表,不用再另外写工具类手动
创建表
<property name="hibernate.hbm2ddl.auto">update</property>
* Spring配置文件的配置<补充>
* 在web.xml中配置spring的filter
* 解决浏览器显示时字符集问题
<filter>
<filter-name>Spring character encoding filter</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Spring character encoding filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
* 保证hibernate中session的开启,直到响应客服端
<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
* Spring 与 Struts 的集成 (主要让spring管理struts中的Action)
* 为了使spring中的BeanFactory(重量级的对象)只初始化一次。
spring提供了一个listerner,这个listerner可以读取
applicationContext.xml, 读取后就把BeanFactory创建好放到
一个servletContext中,以后用时就可以直接到其中取。
listener在web.xml中的配置如下:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath*:applicationContext*.xml
</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
* 可以通过以下方法,到servletContext中取得
BeanFactory了,这样BeanFactory就不用多次创建了
BeanFactory factory = WebApplicationContextUtils
.getRequiredWebApplicationContext(request.getSession()
.getServletContext());
* 为了解除 struts 在取得业务逻辑时对 spring 的依赖性
(依赖查找,上面的BeanFactory的取得就是依赖查找)。
我们可以将业务逻辑对象通过spring注入给Action,避免在Action
中的直接代码查找。此时就需要将Action放入spring的IoC容器中
,
让spring来管理Action。例如下:
* struts-config.xml中如下,将请求提交给spring中的
DelegatingActionProxy(Action的代理类),
进行后续操作。
<action path="/login"
type="org.springframework.web.struts.DelegatingActionProxy"
name="loginForm"
scope="request"
>
<forward name="success" path="/success.jsp"/>
</action>
* applicationContext-xxxx.xml中如下,其中要使用
name标签并且name值要和上面的path值一样以便得到
注入给spring的Action。之中属性 scope="prototype
"
表示创建的Action为多实例的,这样所创建的Action就
是线程安全的。 userManager为注入的业务逻辑对象,
在这里只是个例子。
<bean name="/login"
scope="prototype">
<property name="userManager" ref="userManager"/>
</bean>
* Spring 与 Hibernate 的集成 (主要让spring管理hibernate中的session,
并且提供声明式事物)
* 将hibernate的hibernate.cfg.xml注入给spring中
LocalSessionFactoryBean的configLocation属性上,
从而得到由spring管理的SessionFactory
<!-- 配置sessionFactory -->
<bean id="sessionFactory"
transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED"/>
<tx:method name="del*" propagation="REQUIRED"/>
<tx:method name="modify*" propagation="REQUIRED"/>
<tx:method name="*" read-only="true"/>
</tx:attributes>
</tx:advice>
<!-- 那些类的那些方法参与事物 -->
<aop:config>
<aop:pointcut id="allManagerMethod" expression=
"execution(* com.mikelfee.usermanager(xxxx).manager(xxxx).*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="allManagerMethod"/>
</aop:config>
* 让spring管理hibernate中的session,需要让业务逻辑的实现类继
承HibernateDaoSupport(spring给hibernate做的包装)。其中
HibernateTemplate是对hibernate中的Session又做了一层封装
public class UserManagerImpl
extends HibernateDaoSupport implements UserManager
{
……
this.getHibernateTemplate().save(user);
//this.getSession().save(user);
……
}
* UserManagerImpl中要得到session就必需要注入sessionFactory,
其中sessionFactory会传给HibernateDaoSupport从而得
到session。其中logManager只是另一个引用注入的例子。
<bean id="userManager" ref="sessionFactory"/>
<property name="logManager" ref="logManager"/>
</bean>
到这里你已经成功的集成了SSH,可以进行web开发了。
终于排好了
--
网摘经典:
. web中的客户端(浏览器)它的主要职责是什么
2. web中的服务器又来做什么
3. 客户端和服务端遵从的约定是什么(http)
4. 为什么要有web容器,它都弄些什么的,为什么我们的应用程序要有它呢
5. 客户的请求经过哪些步骤才会被自己写的应用程序接收到,
6. 服务器是如何处理多个请求的
。。。
1.客户端(浏览器)提供的主要功能
1. 打包, 按照http协议格式,组织发送的内容,
2. 解析
1. 按照http协议解析返回的响应内容
2. 解析html,xml等
3. 解析Javascript
3. 提供一些辅助的功能,常见的有
1. 缓存机制
2. cookie机制
。。。
客户端已经成标准,很多的基础功能都已经建好,开发者更多的是界面及一些便捷功能的开发
2. 服务端提供的主要功能
服务端首先是个很笼统的概念,其提供的功能大致有如下:
1. 解析, 按照http协议解析客户端发过来的请求
2. 根据传过来的参数,生成动态网页
3. 打包,按照http协议的格式组织生成的网页,回传给客户端
4. 协调处理多个用户的请求
5. 查找,根据请求查找对应的处理程序
3. 客户端,服务器交互采用的约定
大凡计算机中涉及到交互的系统,都需要遵照一定的交互规则,即定义信息的格式,以便可以解析,协议就是交
互中的约定,标准协议就是大家都遵从的规则,好处是通用,这点很好理解
b/s结构采用标准的http协议,
4. web容器
如上2中,每一次交互,服务器端除了依据客户端传来的参数生成动态网页外,还要做如下动作
解析请求,组织请求,处理多用户的请求,查找对应,对于一个web站点而言,这些功能都是通用的,基础的,每次都要做的,为了最大化的减少开发者的负担,就提出了把这些通用基础的功能提取出来,由一种机制进行管理,提供,这种机制就是web容器
。。。
5. 一个完整的请求处理过程(依具体的web容器等)
比如对于tomcat,第一次请求servlet
客户端发出请求 -》 web容器接收到请求,按照http协议解析请求 -》web容器生成两个对象,request,response,并把解析后的内容赋给request对象 -》web容器读取web.xml根据映射关系找到servlet -》容器加载servlet -》 生成servlet对象 - 》 调用servlet的inti方法 -》 调用service方法,并把request,response传给service -》 service自动匹配对应的doXXX方法 -》执行的doXXX方法 -》web容器关闭时调用servlet实例的destroy方法,销毁实例
上面的过程,没考虑多 线程的模式,实际上是多线程处理的,由web容器为每一个请求产生一个线程对象,负责处理该请求,响应
。。。
服务器离不开线程
传送数据离不开IO
js部分
1判断select选项中 是否存在Value="paraValue"的Item
2向select选项中 加入一个Item
3从select选项中 删除一个Item
4删除select中选中的项
5修改select选项中 value="paraValue"的text为"paraText"
6设置select中text="paraText"的第一个Item为选中
7设置select中value="paraValue"的Item为选中
8得到select的当前选中项的value
9得到select的当前选中项的text
10得到select的当前选中项的Index
11清空select的项
js 代码
// 1.判断select选项中 是否存在Value="paraValue"的Item
function jsSelectIsExitItem(objSelect, objItemValue) {
var isExit = false;
for (var i = 0; i < objSelect.options.length; i++) {
if (objSelect.options[i].value == objItemValue) {
isExit = true;
break;
}
}
return isExit;
}
// 2.向select选项中 加入一个Item
function jsAddItemToSelect(objSelect, objItemText, objItemValue) {
//判断是否存在
if (jsSelectIsExitItem(objSelect, objItemValue)) {
alert("该Item的Value值已经存在");
} else {
var varItem = new Option(objItemText, objItemValue);
objSelect.options.add(varItem);
alert("成功加入");
}
}
// 3.从select选项中 删除一个Item
function jsRemoveItemFromSelect(objSelect, objItemValue) {
//判断是否存在
if (jsSelectIsExitItem(objSelect, objItemValue)) {
for (var i = 0; i < objSelect.options.length; i++) {
if (objSelect.options[i].value == objItemValue) {
objSelect.options.remove(i);
break;
}
}
alert("成功删除");
} else {
alert("该select中 不存在该项");
}
}
// 4.删除select中选中的项
function jsRemoveSelectedItemFromSelect(objSelect) {
var length = objSelect.options.length - 1;
for(var i = length; i >= 0; i--){
if(objSelect[i].selected == true){
objSelect.options[i] = null;
}
}
}
// 5.修改select选项中 value="paraValue"的text为"paraText"
function jsUpdateItemToSelect(objSelect, objItemText, objItemValue) {
//判断是否存在
if (jsSelectIsExitItem(objSelect, objItemValue)) {
for (var i = 0; i < objSelect.options.length; i++) {
if (objSelect.options[i].value == objItemValue) {
objSelect.options[i].text = objItemText;
break;
}
}
alert("成功修改");
} else {
alert("该select中 不存在该项");
}
}
// 6.设置select中text="paraText"的第一个Item为选中
function jsSelectItemByValue(objSelect, objItemText) {
//判断是否存在
var isExit = false;
for (var i = 0; i < objSelect.options.length; i++) {
if (objSelect.options[i].text == objItemText) {
objSelect.options[i].selected = true;
isExit = true;
break;
}
}
//Show出结果
if (isExit) {
alert("成功选中");
} else {
alert("该select中 不存在该项");
}
}
// 7.设置select中value="paraValue"的Item为选中
document.all.objSelect.value = objItemValue;
// 8.得到select的当前选中项的value
var currSelectValue = document.all.objSelect.value;
// 9.得到select的当前选中项的text
var currSelectText = document.all.objSelect.options[document.all.objSelect.selectedIndex].text;
// 10.得到select的当前选中项的Index
var currSelectIndex = document.all.objSelect.selectedIndex;
// 11.清空select的项
document.all.objSelect.options.length = 0;
selected="selected"
2010,11,23
路径名中不能有中文,否则图片无法显示
2010,11,24
修改数据库字符集编码
找到mysql 下my.ini文件修改character-set
2010,11,30
java.lang.string.split
split 方法
将一个字符串分割为子字符串,然后将结果作为字符串数组返回。
stringObj.split([separator,[limit]])
参数
stringObj
必选项。要被分解的 String 对象或文字。该对象不会被 split 方法修改。
separator
可选项。字符串或 正则表达式对象,它标识了分隔字符串时使用的是一个还是多个字符。如果忽
略该选项,返回包含整个字符串的单一元素数组。
limit
可选项。该值用来限制返回数组中的元素个数。
说明
split 方法的结果是一个字符串数组,在 stingObj 中每个出现 separator 的位置都要进行分解
。separator 不作为任何数组元素的部分返回。
示例1:
public class SplitDemo {
public static String[] ss=new String[20];
public SplitDemo() {
String s = "The rain in Spain falls mainly in the plain.";
// 在每个空格字符处进行分解。
ss = s.split(" ");
}
public static void main(String[] args) {
SplitDemo demo=new SplitDemo();
for(int i=0;i<ss.length;i++)
System.out.println(ss[i]);
}
}
程序结果:
The
rain
in
Spain
falls
mainly
in
the
plain.
示例2:
public class SplitDemo {
public static String[] ss=new String[20];
public SplitDemo() {
String s = "The rain in Spain falls mainly in the plain.";
// 在每个空格字符处进行分解。
ss = s.split(" ",2);
}
public static void main(String[] args) {
SplitDemo demo=new SplitDemo();
for(int i=0;i<ss.length;i++)
System.out.println(ss[i]);
}
}
程序结果:
The
rain in Spain falls mainly in the plain.
示例3:
public class SplitDemo {
public static String[] ss=new String[20];
public SplitDemo() {
String s = "The rain in Spain falls mainly in the plain.";
// 在每个空格字符处进行分解。
ss = s.split(" ",20);
}
public static void main(String[] args) {
SplitDemo demo=new SplitDemo();
for(int i=0;i<ss.length;i++)
System.out.println(ss[i]);
}
}
程序结果:
The
rain
in
Spain
falls
mainly
in
the
plain
跳转部分:
跳转有问题的时候 ,可能是跳转条件未满足
常见的如判断是否登录
navigate.js
$.ajax({
type:"post",
url:"userLoginAction!getTbUserInSession.action",
datatype:"json",
timeout:2000,
success:function(json){
var data=eval(json);
if(data[0].logFlag == "1"){
grzy();
propertyset.submit();
}else{
alert("您还没有登录,请先登录!");
}
}
js document对象:
注:页面上元素name属性和JavaScript引用的名称必须一致包括大小写
否则会提示你一个错误信息 "引用的元素为空或者不是对象"
---------------------------------
对象属性
document.title //设置文档标题等价于HTML的<title>标签
document.bgColor //设置页面背景色
document.fgColor //设置前景色(文本颜色)
document.linkColor //未点击过的链接颜色
document.alinkColor //激活链接(焦点在此链接上)的颜色
document.vlinkColor //已点击过的链接颜色
document.URL //设置URL属性从而在同一窗口打开另一网页
document.fileCreatedDate //文件建立日期,只读属性
document.fileModifiedDate //文件修改日期,只读属性
document.fileSize //文件大小,只读属性
document.cookie //设置和读出cookie
document.charset //设置字符集 简体中文:gb2312
---------------------------------
对象方法
document.write() //动态向页面写入内容
document.createElement(Tag) //创建一个html标签对象
document.getElementById(ID) //获得指定ID值的对象
document.getElementsByName(Name) //获得指定Name值的对象
---------------------------------
images集合(页面中的图象)
a)通过集合引用
document.images //对应页面上的<img>标签
document.images.length //对应页面上<img>标签的个数
document.images[0] //第1个<img>标签
document.images[i] //第i-1个<img>标签
b)通过nane属性直接引用
<img name="oImage">
document.images.oImage //document.images.name属性
c)引用图片的src属性
document.images.oImage.src //document.images.name属性.src
d)创建一个图象
var oImage
oImage = new Image()
document.images.oImage.src="/1.jpg"
同时在页面上建立一个<img>标签与之对应就可以显示
<html>
<img name=oImage>
<script language="javascript">
var oImage
oImage = new Image()
document.images.oImage.src="/1.jpg"
</script>
</html>
----------------------------------
forms集合(页面中的表单)
a)通过集合引用
document.forms //对应页面上的<form>标签
document.forms.length //对应页面上<form>标签的个数
document.forms[0] //第1个<form>标签
document.forms[i] //第i-1个<form>标签
document.forms[i].length //第i-1个<form>中的控件数
document.forms[i].elements[j] //第i-1个<form>中第j-1个控件
b)通过标签name属性直接引用
<form name="Myform"><input name="myctrl"></form>
document.Myform.myctrl //document.表单名.控件名
-----------------------------------
<html>
<!--Text控件相关Script-->
<form name="Myform">
<input type="text" name="oText">
<input type="password" name="oPswd">
<form>
<script language="javascript">
//获取文本密码框的值
document.write(document.Myform.oText.value)
document.write(document.Myform.oPswd.value)
</script>
</html>
-----------------------------------
<html>
<!--Select控件相关Script-->
<form name="Myform">
<select name="oSelect">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
</form>
<script language="javascript">
//遍历select控件的option项
var length
length=document.Myform.oSelect.length
for(i=0;i<length;i++)
document.write(document.Myform.oSelect[i].value)
</script>
<script language="javascript">
//遍历option项并且判断某个option是否被选中
for(i=0;i<document.Myform.oSelect.length;i++){
if(document.Myform.oSelect[i].selected!=true)
document.write(document.Myform.oSelect[i].value)
else
document.write("<font color=red>"+document.Myform.oSelect[i].value+"</font>")
}
</script>
<script language="javascript">
//根据SelectedIndex打印出选中的option
//(0到document.Myform.oSelect.length-1)
i=document.Myform.oSelect.selectedIndex
document.write(document.Myform.oSelect[i].value)
</script>
<script language="javascript">
//动态增加select控件的option项
var oOption = document.createElement("OPTION");
oOption.text="4";
oOption.value="4";