月度归档:1999年11月

ASP.NET Master Page改变内容页title方法

在定义好母版页以后,有时我们需要改变网页的标题但是如果直接在母版页中更改title属性又会导致其他的内容页出现相同的title情况,VS2008中提供了母版页的新功能。

1.通过内容页中的Page指令中Title属性改变内容页title:

<%@ Page Language=”C#” MasterPageFile=”~/MyMaster.master” Title=”My Title” %>

2.通过编程改变:前提是标志必须是运行在服务器端,即要给它加上runat=”server”属性

void Page_Load()
{
//……
Page.Header.Title="My Title";
//……
}

3.通过内容页的head占位符控件,在VS2008中添加的母版页会在头部有如下按商品asp:ContentPlaceHolder控件(把母版页的title标签拖到该控件内)

<asp:ContentPlaceHolder id="head" runat="server">
<title>无标题页</title>
</asp:ContentPlaceHolder>

而内容页往往会添加一个对应的asp:Content控件,只需要改变其中的title标签内容即可


无标题页

aspx使用ajax调用服务器方法

Page Method 方式
如果不想独立创建Web Service,而只是希望能够调用页面上的一些方法,那么可以采用Page Method的的方法。同样的我们添加一个页面PageMethodDemo.aspx,增加一些JavaScript和一个后台方法,注意这个方法必须 是静态方法,代码如下:

<script type="text/javascript">
function PageMethodCall()
{
    var testString = "PageMethodCall";
    PageMethods.Test($get('txtName').value, OnSucceeded);
}
// 页面方法调用完成的回调函数.
function OnSucceeded(result)
{
    // 显示调用结果
    var RsltElem = document.getElementById("Results");
    RsltElem.innerHTML = result;
}
</script>
<form id="form1">
    <h2>Page Method</h2>
    <input id="txtName" type="text" />
    <button id="Button1">调用Page Method</button>
</form>

代码页PageMethodDemo.aspx.cs

[System.Web.Services.WebMethod]
public static string Test(string name)
{
    return "Hello " + name + "!";
}

NHibernate查询语言(HQL)

NHibernate中的查询方法

在NHibernate中提供了三种查询方式给我们选择:NHibernate查询语言(HQL,NHibernate Query Language)、条件查询(Criteria API,Query By Example(QBE)是Criteria API的一种特殊情况)、原生SQL(Literal SQL,T-SQL、PL/SQL)。每个人有不同的喜好和特长,可以根据自己的情况选择使用其中的一种或几种。这一节我们介绍NHibernate查询 语言(HQL,NHibernate Query Language)。

NHibernate查询语言(HQL)

NHibernate查询语言(HQL,NHibernate Query Language)是NHibernate特有的基于面向对象的SQL查询语言,它具有继承、多态和关联等特性。实际上是用OOP中的对象和属性映射了数据库中的表和列。
例如这一句:select c.Firstname from Customer c
Customer是数据库表,Firstname是列;而对于HQL:Customer是一个对象,Firstname是Customer对象的属性。相比之下SQL语句非常灵活,但是没有编译时语法验证支持。
本节介绍基础语法:from子句,select子句,where子句,order by子句,group by子句并分别举出可以运行的实例。至于关联和连接,多态(polymorphism)查询,子查询在以后具体实例中学习。注意:HQL不区分大小写。
注意:由于篇幅有限,我在这里仅仅贴出了数据访问层的代码,就是在业务逻辑层可以直接调用的方法。测试这些方法的代码就没有贴出来了,你可以下载本 系列的 源代码仔细看看测试这些方法的代码。这节,我们在上一节源代码的基础上,在数据访问层中新建QueryHQL.cs类用于编写HQL查询方法,在数据访问 的测试层新建一QueryHQLFixture.cs类用于测试。

1.from子句

顾名思义,同SQL语句类似:
1.简单用法:返回表中所有数据。

public IList From()
{
 //返回所有Customer类的实例
 return _session.CreateQuery("from Customer")
        .List();
}

2.使用别名:使用as来赋予表的别名,as可以省略。


public IList FromAlias()
{
  //返回所有Customer类的实例,Customer赋予了别名customer
  return _session.CreateQuery("from Customer as customer")
  .List();
}

3.笛卡尔积:出现多个类,或者分别使用别名,返回笛卡尔积或者称为“交叉”连接。

2.select子句

1.简单用法:在结果集中返回指定的对象和属性。


public IList Select()
{
  //返回所有Customer的CustomerId
  return _session
    .CreateQuery("select c.CustomerId from Customer c")
    .List();
}

2.数组:用Object[]的数组返回多个对象和/或多个属性,或者使用特殊的elements功能,注意一般要结合group by使用。


public IList SelectObject()
{
  return _session
    .CreateQuery("select c.Firstname, count(c.Firstname) from Customer c group by c.Firstname")
    .List();
}

或者使用类型安全的.NET对象,以后在实例中说明。
3.统计函数:用Object[]的数组返回属性的统计函数的结果,注意统计函数的变量也可以是集合count(elements(c.CustomerId) )


public IList AggregateFunction()
{
  return _session
    .CreateQuery("select avg(c.CustomerId),sum(c.CustomerId),count(c) from Customer c")
    .List();
}

4.Distinct用法:distinct和all关键字的用法和语义与SQL相同。实例:获取不同Customer的FirstName。


public IList Distinct()
{
  return _session
    .CreateQuery("select distinct c.Firstname from Customer c")
    .List();
}

3.where子句

where子句让你缩小你要返回的实例的列表范围。


public IList Where()
{
  return _session
    .CreateQuery("select from Customer c where c.Firstname='YJing'")
    .List();
}

where子句允许出现的表达式包括了在SQL中的大多数情况:

  • 数学操作符:+, -, *, /
  • 真假比较操作符:=, >=, <=, <>, !=, like
  • 逻辑操作符:and, or, not
  • 字符串连接操作符:||
  • SQL标量函数:upper(),lower()
  • 没有前缀的( ):表示分组
  • in, between, is null
  • 位置参数:?
  • 命名参数::name, :start_date, :x1
  • SQL文字:’foo’, 69, ‘1970-01-01 10:00:01.0’
  • 枚举值或常量:Color.Tabby

4.order by子句

按照任何返回的类或者组件的属性排序:asc升序、desc降序。


public IList Orderby()
{
  return _session
    .CreateQuery("select from Customer c order by c.Firstname asc,c.Lastname desc")
    .List();
}

5.group by子句

按照任何返回的类或者组件的属性进行分组。


public IList Groupby()
{
  return _session
    .CreateQuery("select c.Firstname, count(c.Firstname) from Customer c group by c.Firstname")
    .List();
}

实例分析

好的,以上基本的查询的确非常简单,我们还是参考一下实例,分析一下我们如何写HQL查询吧!
实例1:按照FirstName查询顾客:


public IList GetCustomersByFirstname(string firstname)
{
  //写法1
  //return _session
  // .CreateQuery("select from Customer c where c.Firstname='" + firstname + "'")
  // .List();
  //写法2:位置型参数
  //return _session
  // .CreateQuery("select from Customer c where c.Firstname=?")
  // .SetString(0, firstname)
  // .List();
  //写法3:命名型参数(推荐)
  return _session
    .CreateQuery("select from Customer c where c.Firstname=:fn")
    .SetString("fn", firstname)
    .List();
}

书写HQL参数有四种写法:

  • 写法1:可能会引起SQL注入,不要使用。
  • 写法2:ADO.NET风格的?参数,NHibernate的参数从0开始计数。
  • 写法3:命名参数用:name的形式在查询字符串中表示,这时IQuery接口把实际参数绑定到命名参数。
  • 写法4:命名的参数列表,把一些参数添加到一个集合列表中的形式,比如可以查询数据是否在这个集合列表中。

使用命名参数有一些好处:命名参数不依赖于它们在查询字符串中出现的顺序;在同一个查询中可以使用多次;它们的可读性好。所以在书写HQL使用参数的时候推荐命名型参数形式。
测试一下这个方法吧:看看数据库中Firstname为“YJingLee”的记录个数是否是1条,并可以判断查询出来的数据的FirstName属性是不是“YJingLee”。


[Test]
public void GetCustomerByFirstnameTest()
{
  IList customers = _queryHQL.GetCustomersByFirstname("YJingLee");
  Assert.AreEqual(1, customers.Count);
  foreach (var c in customers)
  {
    Assert.AreEqual("YJingLee", c.Firstname);
  }
}

实例2:获取顾客ID大于CustomerId的顾客:


public IList GetCustomersWithCustomerIdGreaterThan(int customerId)
{
  return _session
    .CreateQuery("select from Customer c where c.CustomerId > :cid")
    .SetInt32("cid", customerId)
    .List();
}

jsp分页

<%
  BookBean bs = new BookBean();
  List books=bs.getAllBook();
  BookBean rs=null;
  int pageNo = 0;  //将被显示的页面页码
  int pageSize = 6;  //每页显示的记录条数
  int i = 0;  //将被显示的记录行号
  int totalPage = (books.size()-1)/pageSize;  //总页数
  if(request.getParameter("pageNo")!=null)
    pageNo = Integer.parseInt(request.getParameter("pageNo"));
  if(pageNo!=0)
    i = pageNo*pageSize;
  for(int j=0;i <books.size()&&j <pageSize;i++,j++){
    rs =(BookBean) books.get(i);
    String ISBN = rs.getID();
    %>
    <% if(pageNo!=0){ %>
      <a href="booklist.jsp?pageNo=0">首  页 </a>
      <a href="booklist.jsp?pageNo= <%=pageNo-1%>">上一页 </a>
    <% }
    if(pageNo!=totalPage){
    %>
    <a href="booklist.jsp?pageNo= <%=pageNo+1%>">下一页 </a>
    <a href="booklist.jsp?pageNo= <%=totalPage%>">末  页 </a>
<% } %>

String.Format格式说明

C#格式化数值结果表

字符 说明 示例 输出
C 货币 string.Format("{0:C3}", 2) $2.000
D 十进制 string.Format("{0:D3}", 2) 002
E 科学计数法 1.20E+001 1.20E+001
G 常规 string.Format("{0:G}", 2) 2
N 用分号隔开的数字 string.Format("{0:N}", 250000) 250,000.00
X 十六进制 string.Format("{0:X000}", 12) C
string.Format("{0:000.000}", 12.2) 012.200

Strings

There really isn’t any formatting within a strong, beyond it’s alignment. Alignment works for any argument being printed in a String.Format call.

Sample Generates
String.Format("->{1,10}<-", "Hello"); -> Hello<-
String.Format("->{1,-10}<-", "Hello"); ->Hello <-

Numbers

Basic number formatting specifiers:

Specifier Type Format Output (Passed Double 1.42) Output (Passed Int -12400)
c Currency {0:c} $1.42 -$12,400
d Decimal (Whole number) {0:d} System.FormatException -12400
e Scientific {0:e} 1.420000e+000 -1.240000e+004
f Fixed point {0:f} 1.42 -12400.00
g General {0:g} 1.42 -12400
n Number with commas for thousands {0:n} 1.42 -12,400
r Round trippable {0:r} 1.42 System.FormatException
x Hexadecimal {0:x4} System.FormatException cf90

Custom number formatting:

Specifier Type Example Output (Passed Double 1500.42) Note
0 Zero placeholder {0:00.0000} 1500.4200 Pads with zeroes.
# Digit placeholder {0:(#).##} (1500).42
. Decimal point {0:0.0} 1500.4
, Thousand separator {0:0,0} 1,500 Must be between two zeroes.
,. Number scaling {0:0,.} 2 Comma adjacent to Period scales by 1000.
% Percent {0:0%} 150042% Multiplies by 100, adds % sign.
e Exponent placeholder {0:00e+0} 15e+2 Many exponent formats available.
; Group separator see below  

The group separator is especially useful for formatting currency values which require that negative values be enclosed in parentheses. This currency formatting example at the bottom of this document makes it obvious:

Dates

Note that date formatting is especially dependant on the system’s regional settings; the example strings here are from my local locale.

Specifier Type Example (Passed System.DateTime.Now)
d Short date 10/12/2002
D Long date December 10, 2002
t Short time 10:11 PM
T Long time 10:11:29 PM
f Full date & time December 10, 2002 10:11 PM
F Full date & time (long) December 10, 2002 10:11:29 PM
g Default date & time 10/12/2002 10:11 PM
G Default date & time (long) 10/12/2002 10:11:29 PM
M Month day pattern December 10
r RFC1123 date string Tue, 10 Dec 2002 22:11:29 GMT
s Sortable date string 2002-12-10T22:11:29
u Universal sortable, local time 2002-12-10 22:13:50Z
U Universal sortable, GMT December 11, 2002 3:13:50 AM
Y Year month pattern December, 2002

The ‘U’ specifier seems broken; that string certainly isn’t sortable.
Custom date formatting:
 

Specifier Type Example Example Output
dd Day {0:dd} 10
ddd Day name {0:ddd} Tue
dddd Full day name {0:dddd} Tuesday
f, ff, … Second fractions {0:fff} 932
gg, … Era {0:gg} A.D.
hh 2 digit hour {0:hh} 10
HH 2 digit hour, 24hr format {0:HH} 22
mm Minute 00-59 {0:mm} 38
MM Month 01-12 {0:MM} 12
MMM Month abbreviation {0:MMM} Dec
MMMM Full month name {0:MMMM} December
ss Seconds 00-59 {0:ss} 46
tt AM or PM {0:tt} PM
yy Year, 2 digits {0:yy} 02
yyyy Year {0:yyyy} 2002
zz Timezone offset, 2 digits {0:zz} -05
zzz Full timezone offset {0:zzz} -05:00
: Separator {0:hh:mm:ss} 10:43:20
/ Separator {0:dd/MM/yyyy} 10/12/2002

Enumerations

 

Specifier Type
g Default (Flag names if available, otherwise decimal)
f Flags always
d Integer always
x Eight digit hex.

Some Useful Examples

String.Format("{0:$#,##0.00;($#,##0.00);Zero}", value);
This will output "$1,240.00" if passed 1243.50. It will output the same format but in parentheses if the number is negative, and will output the string "Zero" if the number is zero.
String.Format("{0:(###) ###-####}", 18005551212);
This will output "(800) 555-1212".
 
变量.ToString()
字符型转换 转为字符串

12345.ToString("n"); //生成 12,345.00
12345.ToString("C"); //生成 ¥12,345.00
12345.ToString("e"); //生成 1.234500e+004
12345.ToString("f4"); //生成 12345.0000
12345.ToString("x"); //生成 3039 (16进制)
12345.ToString("p"); //生成 1,234,500.00%

女人的爱情与修养有关

一朋友说:“女人有四种境界:浅而清澈型;浅 而混浊型;深而混浊型;深而清澈型”,其中属第四种境界最高,不禁觉得精辟,索性拿来一谈,其实爱情与品德有关。


浅而清澈型的女人比较可爱,简单且又真 诚,纯粹且又单纯,她们没有太多的欲望,没有太多的奢求,只有一颗面对生活与爱情的真诚的心。既没有太多的城府,也没有太多的计较,虽然没有知性女人的聪 慧,却与其相处犹如童年的梦幻,因为简单,所以快乐。若能遇上这等女人,那便会有一个简单且活泼的生活。


浅而混浊型的女人在这个物欲横流的社会比较常见, 浅是说头脑简单,阅历稀少,浑浊是说欲望颇多,奢望强烈,自己都搞不清楚自己需要什么。这类女人一经接触便很容易了解,由于比较粗浅,言语内外,动静之 间,便把那份浑浊暴露的体无完肤,可悲的是这类女人却还比较自爱,常常把自己的打扮得简单而看起来单纯,且故作纯粹,只是举止之间,总是摆脱不了那份复杂 混浊矛盾的内心,给人不舒服的感觉。若是遇上这等女人,那便会有一个劳碌奔波的生活。


深而混浊型的女人颇为矛盾,丰富的阅历与经历残酷的现实早已经麻木了 那份曾经纯粹的心,一方面渴望真诚且又单纯简单的生活与感情,一方面又不敢面对残酷与现实的生活,终日忐忑与现实与梦幻之间,忽而相信感情,追求生活,忽 而沉醉现实,自甘堕落。说其简单,却不简单,说其成熟,却不成熟。只能称之为矛盾且无奈。这类女人其实需要一份或者一片希望来走出自己的内心的阴暗,只是 繁华的都市阑珊的星光往往让人看不到希望的灯火。


深而清澈型的女人算得上女人中的极品,经历俗事的风雨与坎坷,经历感情的磨砺与奔波,还能保持一份纯粹的 心灵与灵魂,已经不能用任何语言去表达这类女人的美丽与唯美。其实爱情与修养有关,就像于丹讲论语一般,虽然不太赞成她的某些观点,但是总得思路还是对 的,每个人的生活品质,感情追求,其实其直接决定的原因是每个人的个人品味与修养。这个修养,包含太多,甚至看似不相关的素质都是包含其中,以前一直在谈 论修身养性的问题,现在看来是对的,人生就像一门经营哲学,感情,生活,事业都需要用自身的素质修养去驾驭的,每个人的生活的品质层次直接来源于他的个人 修养,没有抱怨,没有不公,那便是生活。你对爱情生活的认知程度,对责任义务的把握程序直接决定了你可以遇到一个什么样的人,不要去抱怨对方的问题,其实 那便是你自己的选择。中国有一句话:”物以类聚,人以群分”,还是真的有道理的。就像老百姓常说的,看看一个人的老公,或者老婆,便知道对方是什么人了

Javascript中最常用的55个经典技巧

  1. 将彻底屏蔽鼠标右键
    oncontextmenu="window.event.returnValue=false"
    <table border oncontextmenu=return(false)><td>no</table> 可用于Table

  2. 取消选取、防止复制
    <body onselectstart="return false">

  3. 不准粘贴
    onpaste="return false"

  4. 防止复制
    oncopy="return false;" oncut="return false;"

  5. IE地址栏前换成自己的图标
    <link rel="Shortcut Icon" href="favicon.ico">

  6. 可以在收藏夹中显示出你的图标
    <link rel="Bookmark" href="favicon.ico">

  7. 关闭输入法
    <input style="ime-mode:disabled">

  8. 永远都会带着框架

    <script language="JavaScript"><!--
    if (window == top)top.location.href = "frames.htm"; //frames.htm为框架网页
    // --></script>
    
  9. 防止被人frame
    <SCRIPT LANGUAGE=JAVASCRIPT><!--
    if (top.location != self.location)top.location=self.location;
    // --></SCRIPT>
    
  10. 网页将不能被另存为
    <noscript><*** src="/*.html>";</***></noscript>

  11. <input type=button value="/查看网页源代码 onclick="window.location = "view-source:"+ "http://www.pconline.com.cn"">

  12. 删除时确认
    <a href=""javascript :if(confirm("确实要删除吗?"))location="boos.asp?&areyou=删除&page=1"">删除</a>

  13. 取得控件的绝对位置

    //Javascript
    <script language="Javascript">
    function getIE(e){
        var t=e.offsetTop;
        var l=e.offsetLeft;
        while(e=e.offsetParent){
            t+=e.offsetTop;
            l+=e.offsetLeft;
        }
        alert("top="+t+"/nleft="+l);
    }
    </script>
    
  14. 光标是停在文本框文字的最后
    <script language="javascript">
    function cc()
    {
        var e = event.srcElement;
        var r =e.createTextRange();
        r.moveStart("character",e.value.length);
        r.collapse(true);
        r.select();
    }
    </script>
    <input type=text name=text1 value="123" onfocus="cc()">
    
  15. 判断上一页的来源
    document.referrer

  16. 最小化、最大化、关闭窗口

    <object id=hh1 classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11">
    <param name="Command" value="Minimize"></object>
    <object id=hh2 classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11">
    <param name="Command" value="Maximize"></object>
    <OBJECT id=hh3 classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11">
    <PARAM NAME="Command" value="/Close"></OBJECT>
    <input type=button value="/最小化 onclick=hh1.Click()>
    <input type=button value="/blog/最大化 onclick=hh2.Click()>
    <input type=button value=关闭 onclick=hh3.Click()>
    
  17. 屏蔽功能键Shift,Alt,Ctrl
    <script>
    function look(){
        if(event.shiftKey)
            alert("禁止按Shift键!"); //可以换成ALT CTRL
    }
    document.onkeydown=look;
    </script>
    
  18. 网页不会被缓存
    <META HTTP-EQUIV="pragma" CONTENT="no-cache">
    <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">
    <META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT">
    //或者
    <META HTTP-EQUIV="expires" CONTENT="0">
    
  19. 怎样让表单没有凹凸感?
    <input type=text style="""border:1 solid #000000">

    <input type=text style="border-left:none; border-right:none; border-top:none; border-bottom: 1 solid #000000"></textarea>

  20. <div><span>&<layer>的区别?
    <div>(division)用来定义大段的页面元素,会产生转行
    <span>用来定义同一行内的元素,跟<div>的唯一区别是不产生转行
    <layer>是ns的标记,ie不支持,相当于<div>

  21. 让弹出窗口总是在最上面:
    <body onblur="this.focus();">

  22. 不要滚动条?

    • 让竖条没有:
      <body style="overflow:scroll;overflow-y:hidden"></body>

    • 让横条没有:
      <body style="overflow:scroll;overflow-x:hidden"></body>

    • 两个都去掉?更简单了
      <body scroll="no"></body>

  23. 怎样去掉图片链接点击后,图片周围的虚线?
    <a href="#" onFocus="this.blur()"><img src="/logo.jpg" border=0></a>

  24. 电子邮件处理提交表单

    <form name="form1" method="post" action=mailto:****@***.com
    enctype="text/plain">
    <input type=submit>
    </form>
    
  25. 在打开的子窗口刷新父窗口的代码里如何写?
    window.opener.location.reload()

  26. 如何设定打开页面的大小
    <body onload="top.resizeTo(300,200);">
    打开页面的位置<body onload="top.moveBy(300,200);">

  27. 在页面中如何加入不是满铺的背景图片,拉动页面时背景图不动

    <STYLE>
    body
    {background-image:url(/logo.gif); background-repeat:no-repeat;
    background-position:center;background-attachment: fixed}
    </STYLE>
    
  28. 检查一段字符串是否全由数字组成
    <script language="Javascript">
    function checkNum(str){return str.match(//D/)==null}
    alert(checkNum("1232142141"))
    alert(checkNum("123214214a1"))
    </script>
    
  29. 获得一个窗口的大小
    • document.body.clientWidth

    • document.body.clientHeight

  30. 怎么判断是否是字符

    if (/[^/x00-/xff]/g.test(s)) alert("含有汉字");
    else alert("全是字符");
    
  31. TEXTAREA自适应文字行数的多少
    <textarea rows=1 cols=27 onpropertychange="this.style.posHeight=this.scrollHeight">
    </textarea>
    
  32. 日期减去天数等于第二个日期
    <script language=Javascript>
    function cc(dd,dadd)
    {
        //可以加上错误处理
        var a = new Date(dd)
        a = a.valueOf()
        a = a - dadd * 24 * 60 * 60 * 1000
        a = new Date(a)
        alert(a.getFullYear() + "年" + (a.getMonth() + 1) + "月" + a.getDate() + "日")
    }
    cc("12/23/2002",2)
    </script>
    
  33. 选择了哪一个Radio
    <HTML><script language="vbscript">
    function checkme()
    for each ob in radio1
    if ob.checked then
    window.alert ob.value
    next
    end function
    </script><BODY>
    <INPUT name="radio1" type="radio" value="/style" checked>Style
    <INPUT name="radio1" type="radio" value="/blog/barcode">Barcode
    <INPUT type="button" value="check" onclick="checkme()">
    </BODY></HTML>
    
  34. 脚本永不出错
    <SCRIPT LANGUAGE="JavaScript">
    function killErrors() {
        return true;
    }
    window.onerror = killErrors;
    </SCRIPT>
    
  35. ENTER键可以让光标移到下一个输入框
    <input onkeydown="if(event.keyCode==13)event.keyCode=9">

  36. 检测某个网站的链接速度:
    把如下代码加入区域中:

    <script language=Javascript>
    tim=1
    setInterval("tim++",100)
    b=1
    var autourl=new Array()
    autourl[1]=1000){this.resized=true;this.style.width=1000;}" align=absMiddle border=0>www.njcatv.net"
    autourl[2]="javacool.3322.net"
    autourl[3]=1000){this.resized=true;this.style.width=1000;}" align=absMiddle border=0>www.sina.com.cn"
    autourl[4]="www.nuaa.edu.cn"
    autourl[5]=1000){this.resized=true;this.style.width=1000;}" align=absMiddle border=0>www.cctv.com"
    function butt(){
    ***("<form name=autof>")
    for(var i=1;i<autourl.length;i++)
    ***("<input type=text name=txt"+i+" size=10 value="/测试中……> =》<input type=text
    name=url"+i+" size=40> =》<input type=button value="/blog/GO
    onclick=window.open(this.form.url"+i+".value)><br>")
    ***("<input type=submit value=刷新></form>")
    }
    butt()
    function auto(url){
    document.forms[0]["url"+b].value=url
    if(tim>200)
    {document.forms[0]["txt"+b].value="/链接超时"}
    else
    {document.forms[0]["txt"+b].value="/blog/时间"+tim/10+"秒"}
    b++
    }
    function run(){for(var i=1;i<autourl.length;i++)***("<img src=http://"+autourl+"/"+Math.random()+" width=1 height=1
    onerror=auto("http://"+autourl+"")>")}
    run()</script>
    
  37. 各种样式的光标
    • auto :标准光标
    • default :标准箭头
    • hand :手形光标
    • wait :等待光标
    • text :I形光标
    • vertical-text :水平I形光标
    • no-drop :不可拖动光标
    • not-allowed :无效光标
    • help :?帮助光标
    • all-scroll :三角方向标
    • move :移动标
    • crosshair :十字标
    • e-resize
    • n-resize
    • nw-resize
    • w-resize
    • s-resize
    • se-resize
    • sw-resize
  38. 页面进入和退出的特效
    • 进入页面<meta http-equiv="Page-Enter" content="revealTrans(duration=x, transition=y)">

    • 推出页面<meta http-equiv="Page-Exit" content="revealTrans(duration=x, transition=y)">

    这个是页面被载入和调出时的一些特效。duration表示特效的持续时间,以秒为单位。transition表示使用哪种特效,取值为1-23:

    1. 矩形缩小
    2. 矩形扩大
    3. 圆形缩小
    4. 圆形扩大
    5. 下到上刷新
    6. 上到下刷新
    7. 左到右刷新
    8. 右到左刷新
    9. 竖百叶窗
    10. 横百叶窗
    11. 错位横百叶窗
    12. 错位竖百叶窗
    13. 点扩散
    14. 左右到中间刷新
    15. 中间到左右刷新
    16. 中间到上下
    17. 上下到中间
    18. 右下到左上
    19. 右上到左下
    20. 左上到右下
    21. 左下到右上
    22. 横条
    23. 竖条
    24. 以上22种随机选择一种
  39. 在规定时间内跳转
    <META http-equiv=V="REFRESH" content="5;URL=http://www.51js.com">

  40. 网页是否被检索
    <meta name="ROBOTS" content="属性值">

    • 其中属性值有以下一些:
    • 属性值为”all”: 文件将被检索,且页上链接可被查询;
    • 属性值为”none”: 文件不被检索,而且不查询页上的链接;
    • 属性值为”index”: 文件将被检索;
    • 属性值为”follow”: 查询页上的链接;
    • 属性值为”noindex”: 文件不检索,但可被查询链接;
    • 属性值为”nofollow”: 文件不被检索,但可查询页上的链接。
  41. email地址的分割
    把如下代码加入<body>区域中
    <a href="mailto:webmaster@sina.com">webmaster@sina.com</a>

  42. 流动边框效果的表格
    把如下代码加入<body>区域中

    <SCRIPT>
    l=Array(6,7,8,9,'a','b','b','c','d','e','f')
    Nx=5;Ny=35
    t="<table border=0 cellspacing=0 cellpadding=0 height="+((Nx+2)*16)+"><tr>"
    for(x=Nx;x<Nx+Ny;x++)
    t+="<td width=16 id=a_mo"+x+"> </td>"
    t+="</tr><tr><td width=10 id=a_mo"+(Nx-1)+"> </td><td colspan="+(Ny-2)+" rowspan="+(Nx)+"> </td><td width=16 id=a_mo"+(Nx+Ny)+"></td></tr>"
    for(x=2;x<=Nx;x++)
    t+="<tr><td width=16 id=a_mo"+(Nx-x)+"> </td><td width=16 id=a_mo"+(Ny+Nx+x-1)+"> </td></tr>"
    t+="<tr>"
    for(x=Ny;x>0;x--)
    t+="<td width=16 id=a_mo"+(x+Nx*2+Ny-1)+"> </td>"
    ***(t+"</tr></table>")
    var N=Nx*2+Ny*2
    function f1(y){
    for(i=0;i<N;i++){
    c=(i+y)%20;if(c>10)c=20-c
    document.all["a_mo"+(i)].bgColor=""""#0000"+l[c]+l[c]+"'"}
    y++
    setTimeout('f1('+y+')','1')}
    f1(1)
    </SCRIPT>
    
  43. JavaScript主页弹出窗口技巧
    窗口中间弹出

    <script>
    window.open("http://www.cctv.com","","width=400,height=240,top="+(screen.availHeight-240)/2+",left="+(screen.availWidth-400)/2);
    </script>
    ============
    <html>
    <head>
    <script language="LiveScript">
    function WinOpen() {
        msg=open("","DisplayWindow","toolbar=no,directories=no,menubar=no");
        msg.***("<HEAD><TITLE>哈 罗!</TITLE></HEAD>");
        msg.***("<CENTER><H1>酷 毙 了!</H1><h2>这 是<B>JavaScript</B>所 开 的 视 窗!</h2></CENTER>");
    }
    </script>
    </head>
    <body>
    <form>
    <input type="button" name="Button1" value="Push me" onclick="WinOpen()">
    </form>
    </body>
    </html>
    
  44. 页面的打开移动
    把如下代码加入<body>区域中

    <SCRIPT LANGUAGE="JavaScript">
    for (t = 2; t > 0; t--) {
        for (x = 20; x > 0; x--) {
            for (y = 10; y > 0; y--) {
                parent.moveBy(0,-x);
            }
        }
        for (x = 20; x > 0; x--) {
            for (y = 10; y > 0; y--) {
                parent.moveBy(0,x);
            }
        }
        for (x = 20; x > 0; x--) {
            for (y = 10; y > 0; y--) {
                parent.moveBy(x,0);
            }
        }
        for (x = 20; x > 0; x--) {
            for (y = 10; y > 0; y--) {
                parent.moveBy(-x,0);
            }
        }
    }
    </script>
    
  45. 显示个人客户端机器的日期和时间
    <script language="LiveScript">
    today = new Date()
    console.log("现 在 时 间 是: ",today.getHours(),":",today.getMinutes());
    console.log("<br>今 天 日 期 为: ", today.getMonth()+1,"/",today.getDate(),"/",today.getYear());
    </script>
    
  46. 自动的为你每次产生最後修改的日期了:
    <html>
    <body>
    This is a simple HTML- page.
    <br>
    Last changes:
    <script language="LiveScript">
        ***(document.lastModified)
    </script>
    </body>
    </html>
    
  47. 不能为空和邮件地址的约束:
    <html>
    <head>
    <script language="JavaScript">
    function test1(form) {
        if (form.text1.value == "")
            alert("您 没 写 上 任 何 东 西, 请 再 输 入 一 次 !")
        else {
            alert("嗨 "+form.text1.value+"! 您 已 输 入 完 成 !");
        }
    }
    function test2(form) {
        if (form.text2.value == "" || form.text2.value.indexOf('@', 0) == -1)
            alert("这 不 是 正 确 的 e-mail address! 请 再 输 入 一 次 !");
        else alert("您 已 输 入 完 成 !");
    }
    </script>
    </head>
    <body>
        <form name="first">
            Enter your name:<br>
            <input type="text" name="text1">
            <input type="button" name="button1" value="输 入 测 试" onClick="test1(this.form)">
            <P>
            Enter your e-mail address:<br>
            <input type="text" name="text2">
            <input type="button" name="button2" value="输 入 测 试" onClick="test2(this.form)">
        </form>
    </body>
    
  48. 跑马灯
    <html>
    <head>
    <script language="JavaScript">
    var scrtxt="怎麽样 ! 很酷吧 ! 您也可以试试."+"Here goes your message the visitors to your
    page will "+"look at for hours in pure fascination...";
    var lentxt=scrtxt.length;
    var width=100;
    var pos=1-width;
    function scroll() {
        pos++;
        var scroller="";
        if (pos==lentxt) {
            pos=1-width;
        }
        if (pos<0) {
            for (var i=1; i<=Math.abs(pos); i++) {
            scroller=scroller+" ";}
            scroller=scroller+scrtxt.substring(0,width-i+1);
        }
        else {
            scroller=scroller+scrtxt.substring(pos,width+pos);
        }
        window.status = scroller;
        setTimeout("scroll()",150);
    }
    </script>
    </head>
    <body onLoad="scroll();return true;">
    这里可显示您的网页 !
    </body>
    </html>
    
  49. 在网页中用按钮来控制前页,后页和主页的显示。
    <html>
    <body>
    <FORM NAME="buttonbar">
        <INPUT TYPE="button" VALUE="Back" onClick="history.back()">
        <INPUT TYPE="button" VALUE="JS- Home" onClick="location='script.html'">
        <INPUT TYPE="button" VALUE="Next" onCLick="history.forward()">
    </FORM>
    </body>
    </html>
    
  50. 查看某网址的源代码
    把如下代码加入<body>区域中

    <SCRIPT>
    function add()
    {
        var ress=document.forms[0].luxiaoqing.value
        window.location="view-source:"+ress;
    }
    </SCRIPT>
    输入要查看源代码的URL地址:
    <FORM>
        <input type="text" name="luxiaoqing" size=40 value="http://"></FORM>
    <FORM><br>
    <INPUT type="button" value="查看源代码" onClick=add()>
    </FORM>
    
  51. title显示日期
    把如下代码加入<body>区域中:

    <script language="JavaScript1.2">
    var isnMonth = new Array("1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月");
    var isnDay = new Array("星期日","星期一","星期二","星期三","星期四","星期五","星期六","星期日");
    today = new Date () ;
    Year = today.getYear();
    Date = today.getDate();
    if (document.all)
        document.title="今天是: "+Year+"年"+isnMonth[today.getMonth()]+Date+"日"+isnDay[today.getDay()]
    </script>
    
  52. 显示所有链接
    把如下代码加入<body>区域中

    <script language="JavaScript1.2">
    function extractlinks(){
        var links=document.all.tags("A")
        var total=links.length
        var win2=window.open("","","menubar,scrollbars,toolbar")
        win2.***("<font size='2'>一共有"+total+"个连接</font><br>")
        for (i=0;i<total;i++){
            win2.***("<font size='2'>"+links[i].outerHTML+"</font><br>")
        }
    }
    </script>
    <input type="button" onClick="extractlinks()" value="显示所有的连接">
    
  53. 回车键换行
    把如下代码加入<body>区域中

    <script type="text/javascript">
    function handleEnter (field, event) {
        var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
        if (keyCode == 13) {
            var i;
            for (i = 0; i < field.form.elements.length; i++)
                if (field == field.form.elements[i])
                    break;
                i = (i + 1) % field.form.elements.length;
                field.form.elements[i].focus();
            return false;
        }
        else
            return true;
    }
    </script>
    <form>
    <input type="text" onkeypress="return handleEnter(this, event)"><br>
    <input type="text" onkeypress="return handleEnter(this, event)"><br>
    <textarea>
    
  54. 确认后提交
    把如下代码加入<body>区域中

    <SCRIPT LANGUAGE="JavaScript">
    function msg(){
    if (confirm("你确认要提交嘛!"))
        document.lnman.submit()
    }
    </SCRIPT>
    <form name="lnman" method="post" action="">
        <input type="text" name="textfield" value="确认后提交">
        <input type="button" name="Submit" value="提交" onclick="msg();">
    </form>
    
  55. 改变表格的内容
    把如下代码加入<body>区域中

    <script ***script>
    var arr=new Array()
    arr[0]="一一一一一";
    arr[1]="二二二二二";
    arr[2]="三三三三三";
    </script>
    <select onchange="zz.cells[this.selectedIndex].innerHTML=arr[this.selectedIndex]">
    <option value=a>改变第一格</option>
    <option value=a>改变第二格</option>
    <option value=a>改变第三格</option>
    </select>
    <table id=zz border=1>
        <tr height=20>
            <td width=150>第一格</td>
            <td width=150>第二格</td>
            <td width=150>第三格</td>
        </tr>
    </table>
    

柏林墙的逃亡(摘自百度百科)

1961年8 月,一个沉闷的夏天。对于大量东德人经柏林逃往西方已经忍无可忍的东德人和苏联人搞了一个漂亮的偷袭。8 月12日凌晨1 点,2 万多军队突然开到东西柏林边境,立刻开始了修筑柏林墙的工程。应该说,这个以我国长城命名的工程,准备还是很充分的,绝对不是豆腐渣,仅仅到13日凌晨, 第一期工程全部完工,整个东西柏林被铁丝网全部分割,再加路障。柏林墙正式树立了起来。
然而上帝实在会开玩笑,就在柏林墙的修筑过程中,东德人就开始了翻越柏林墙,逃亡西德的"柏林 墙传说"。东德人的争分夺秒,只争朝夕的精神,给柏林墙的历史研究留下了千古之迷,到底是先有柏林墙,再有翻越行动,还是未等墙树起来,就已经开始了翻 越,竟然永远无法得到一个答案了。
历史记载,柏林墙初步完成,即东西柏林正式分割,在13日中午12点37分,最后一个路口宣布 封锁为标志。但就在13日,最早明白过来的东德人已经开始用生命搏击柏林墙,当天,一位技工跨过正在树立的铁丝网跳进了西柏林,有人跳进运河游到了西柏 林。然而,天意弄人,谁也没想到记录他们踏上西德领土的时间。13日上午,西德人涌向柏林墙,向墙那边的同胞投掷自己的通行证,身份证件。到苏联军队能够 阻止这一举动前,数以千计的证件已经被扔到了东德同胞的手里。大批东德人借机混在返回西柏林的西德人中间偷渡逾越了柏林墙。
下面就介绍几个逃过柏林墙,争取自由的人!

天意弄人

13日下午,柏林墙树立以后,第一个逾越柏林墙的人出现了。一个青年在光天化日之下,用百米冲 刺的速度飞奔向铁丝网。但是,三名警察追上了他,将他打倒在地,谁也没有想到,被打倒的他竟奇迹般又站了起来,夺过警察的枪,一边与警察对峙一边继续向西 柏林飞奔。警察是尽职的,他们不顾这个年轻人的枪,冲上去和他又一次扭打成一团,并且一刀刺进青年人的膝盖。这次这个年轻人失去了奔跑的能力,面对三个警 察,结局已经注定。然而,上天决心要给大家看一幕喜剧而不是悲剧。就在此刻,西柏林群众雷鸣般的怒吼惊醒了三名警察,他们已经越过了柏林墙,现在是在西德 的土地上,他们不再是警察,而成了违法者。他们扔下青年跑回柏林墙的另一侧。这个青年拖著残废的腿,一边拼命呼救一边爬到了西柏林。
事后证明,这是一个大大的误会。事实上柏林墙并不是沿东德西德的边境修筑的,而是偏东德一侧, 这是为了保证,即使你越过了柏林墙,你仍然在东德土地上,警察和军队仍然有权力和能力开枪将你击毙。当时那三位警察并没有越界,他们大可以合法将那个青年 绑回东德。然而,面对这柏林墙上的第一次交锋,他们误会了,害怕了,那个青年简直是奇迹般的竟然这样逃脱了已经笼罩住了自己的厄运。

幽默的逃亡

要说最可爱的逃亡者,颇有几个竞争者,首先是两位大情圣,一个是阿根廷人,一个是澳大利亚人。大家看看他们逃亡的手段就可以知道,也就是他们能做出来,死脑筋的德国人就是再有几百万人逃亡,也做不出这么幽默的计划来。
柏林墙边的死窗户。街道在西方, 楼房属于东方。楼房上的窗口就是著名的”死窗户",被砌死以阻止人民逃跑到西柏林。 柏林墙并不是铁板一块,总有那么几个门,几个交通站。于是情人被困在东柏林的两位就打起了交通站的主意。经调查研究,交通站是靠栏杆来封锁交通的,虽然栏 杆结实,撞不断,但是栏杆比较高,如果汽车足够矮,可以从栏杆底下直接钻过去。于是计划诞生了,把自己的亲爱的放在行李箱里,趁警察不注意,开足马力,一 下从栏杆下面钻到西柏林就行了。说干就干,澳大利亚人就这么把自己的新娘子接到了西柏林。如果故事到此为止,那就不存在什么幽默了。但是这时候,阿根廷人 出场了,他充分表现了南美人民的热血沸腾,但不爱动脑子的特点,他认为这个计划不错,决定自己也照办煮碗。所谓照办,真的是照办,他居然连车子都是直接找 澳大利亚人借的同一辆车!说起来也是,这么矮的车本来就不好找。
问题是,他一点伪装都没有做,连车牌都不换,就这么开了去。阿根廷人开著这辆已经被报纸报道得 详细得不能再详细的车,大摇大摆开进东柏林。东德警察一看,这车怎么这么眼熟,但是谁也猜不到天下还真有这么大胆的人。警察问"这车,以前是不是来过东 德?"阿根廷人脸不红心不跳的回答,"当然没有啦"。警察自己也糊涂了,大手一挥,放行了!结果是,在一个星期以后,同一辆车,把另一对情侣,用同样的方 式带到了西柏林。在他们举行婚礼之际,悲愤的东德警察把栏杆下面装了无数垂直的铁条,别说是车,就是条蛇也休想从栏杆下面再钻出去!

地道冒险

五岁的小男孩。他家经过地道从柏林墙的下面钻到了西柏林。这个地道挖了整整6 个月。而且因为东柏林警察便衣密布,地道不得不从西柏林挖掘。要求是绝对不许做地面测量,还必须正好挖到被接应者的厕所里。为了不被地面人员发现,地道深入地下12米!
这样庞大的工程,这样长的时间,真不知道逃亡者是如何承受这样的心理压力如此之久的。但这个孩子什么也不知道。当他从地道口出现在西柏林的时候,面对记者和救援者人群发表感想如下:"这个大洞洞怪吓人的,不过没有野兽"

功败垂成

1961年,18岁的彼得。菲西特就是这么一个人。他已经爬到了柏林墙的顶部,只需要再加最后一把劲,就可以达成目标,就在这个时候,枪声响了……
彼得滑落回柏林墙东侧。悲剧还没有完,身中数弹的彼得倒在柏林墙下,血流如注,我不知道东德的 警察是一时不敢承担责任,跑去请示上级,还是真的就已经下了杀心。彼得就这样在墙下躺了50分钟,没有一个东德警察前来管他。彼得的呼喊声一点一点的低下 去了,低下去了。西柏林的人群爆发出愤怒的抗议声:“你们是杀人犯”“你们是法西斯!”上千群众怒吼著。西德的警察冒险跑到柏林墙边(前面已经说过,这是 极其危险的,柏林墙西侧依然是东德的土地,警察已经"越界",完全可能被枪击)把急救包扔向彼得。但是太晚了,彼得已经失去了自救的能力。彼得终于停止了 呼吸。他的血已经流尽了,在他蓝眼睛里最后映出的,依然是东柏林。50分钟以后,东德警察抬走了他的尸体。

梦想的力量

如果说彼得最大的不幸在于他最终没有成功,我不知道下面这个最后"成功" 的例子,是不是算幸运。在柏林墙刚完成的那一年,由于墙还不是很坚固,有人就想出了办法,开重型车辆直接撞墙!直接冲开柏林墙进入西德。1961年,这类事件多达14起。
逃亡者要面对的绝不仅仅是坚固的高墙,还有来自军队和警察的密集射击。有军事常识的朋友都知 道,对于穿透力极强的子弹,民用的车壁,车门根本就是nothing,香港电影里躲到小轿车后面就可以逃开对方射击的镜头完全是搞笑。所以,用这个办法冲 击柏林墙的人,实际上等于完全不设防的穿行在枪林弹雨中,去争取一次严重交通事故的机会!
布鲁希克和他的同伙同样是利用大客车冲击柏林墙,但是他们的行动从一开始就被发现了。军队和警 察从多个方向向客车密集射击,客车起火燃烧,弹痕累累!还好,客车质量过硬,不但没有熄火,还在布鲁希克良好的驾驶下奋勇加速,一声巨响,柏林墙被撞开了 一个大缺口,整个客车冲进了西柏林!欢呼的人群拥上来迎接,却被眼前的景象震惊了,驾驶座上的布鲁希克身中19 弹,他是用生命的最后意志坚持加速,冲向柏林墙的。当客车冲进西柏林的那一刻,布鲁希克停止了呼吸。柏林人展开了一场争论,布鲁希克究竟有没有看到他梦想 看到的西柏林?最后是一个现场镜头宽慰了大家,从镜头上看,客车驾驶座位于西柏林之后,布鲁希克还有一个抬头的动作。是的,那时候他还活著!他的眼睛最后 映出的,是他梦想中的迦南西柏林!他是一个成功者。

“潜水艇”逃亡

1968 年,一位东德青年利用河流潜水到达西德。大家心目中的潜水是什么样的?潜水服?潜水镜?总之他一个人能有多大本事,还一切都必须自己造,最多是一点粗糙的 个人潜水工具罢?这位青年自己造的是潜艇!他用的是摩托车马达,配上自己组装的钢板,还有导航,压缩气体等系统。硬是在家造出了一个个人用的小潜水艇。质 量如何?我看可以通过ISO9002 国际认证。这潜水艇在水下航行了超过5 个小时,才从西德那边冒出来,其中没有发生任何事故。有同学说了,5 个小时是不是太长了一点,那是没办法的事情,你试试拿个小摩托的马达去潜水看。这小潜水艇当然是一个奇迹,该青年的逃亡过程使他立刻在西德找到了工作,各 大机械公司竞相聘用该青年为设计师。听说后来他还真在机械设计上大有成就。

象征自由的热气球

1979年某夜晚,从东德一个家庭的后院升起了一个巨大的热气球。气球下面的吊篮里装著两个家庭–两对夫妇和他们的四个孩子。这个气球完全由这两个家庭 手工制成,花了数年的时间。在此期间,两个家庭自学成才,从材料学,工程学,气体动力学,气象学……一直到建立家庭实验室,最后成功的在家庭的后院里制作 完成了这个高达28米的热气球!经调查,此热气球是欧洲历史上最大的热气球,被记入吉尼斯世界记录!这个热气球在通过柏林墙的时候,被警察发现了。警察目 瞪口呆之余,还算记得开枪射击。这一射击,该气球良好的工艺水准就发挥了出来。逃亡者操纵热气球一下升高到了2800米以上的高空,不但枪打不到,连探照 灯都照不到!警察只好紧急呼叫空军支援,寻找一个热气球,把它打下来。苏联空军"苏","米"战机立刻出动,但是热气球在28分钟的飞行以后,已经完成了 使命,安全落地。问题是,当气球被发现以后,两家人决定立刻降落,以避免被战机击落。这一 "紧急降落",就谁也摸不准方向了,降落的地点无法确定。到底是已经到了西德,还是被迫降在东德,谁也不知道。面对未知的前景,8 个人都失去了验证的勇气。他们根本不敢走出这个气球,就这样躲在吊篮里长达24小时之久。他们已经没有勇气亲自揭晓自己的命运了。他们唯一能作的,就是祈 祷。降落整整24小时以后,军人来了,揭开了气球。他们对这8 个逃亡者说出了他们盼望了多少年的话。"你们自由了,这里是西德领土。"