??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲人成电影亚洲人成9999网 ,亚洲国产精品一区二区久久hs ,国产偷国产偷亚洲高清在线http://www.tkk7.com/yczz/category/11244.htmlzh-cnFri, 14 Dec 2007 17:18:42 GMTFri, 14 Dec 2007 17:18:42 GMT60JavaScript日期处理函数大全http://www.tkk7.com/yczz/articles/167785.html飞鸟飞鸟Fri, 14 Dec 2007 07:25:00 GMThttp://www.tkk7.com/yczz/articles/167785.htmlhttp://www.tkk7.com/yczz/comments/167785.htmlhttp://www.tkk7.com/yczz/articles/167785.html#Feedback0http://www.tkk7.com/yczz/comments/commentRss/167785.htmlhttp://www.tkk7.com/yczz/services/trackbacks/167785.html 有hl常问到有关如何使用JS处理日期的问题,我只好献拙了?br /> 希望能够有点用处?br /> 1?font color="#ff0000">解决2000问题
function y2k(number) { return (number < 1000) ? number + 1900 : number; }
2?font color="#ff0000">查日期是否合?/font>
// 当输入参CؓisDate(dd,mm,ccyy)Ӟ表示要检查年Q月Q日
// 当输入参CؓisDate(dd,mm) 表示默认qؓ当前q?br /> // 当输入参CؓisDate(dd)    表示默认q_月ؓ当前q月
// 注意输入月䆾保证?-12以内?br />
function isDate (day,month,year) {
    var today = new Date();
    year = ((!year) ? y2k(today.getYear())year);
    month = ((!month) ? today.getMonth():month-1);
    if (!day) return false
    var test = new Date(year,month,day); 86oo.com提供各类教程
    if ( (y2k(test.getYear()) == year) &&
         (month == test.getMonth()) &&
         (day == test.getDate()) )
        return true;
    else
        return false
}

以下是调用例子:
if (isDate(31,2,1997))
    document.write("Valid");
else
    document.write("Invalid");

3?font color="#ff0000">如何判断两个日期中的间隔天数
function daysElapsed(date1,date2) {
    var difference = Date.UTC(date1.getYear(),date1.getMonth(),date1.getDate(),0,0,0)
                   - Date.UTC(date2.getYear(),date2.getMonth(),date2.getDate(),0,0,0);
    return difference/1000/60/60/24; 86oo.com
}

4?font color="#ff0000">如何一个下拉列表框中的月䆾传递到另一?/font>
<FORM>
<SELECT NAME="selectName">
<OPTION>January
<OPTION>February
<OPTION>March
<OPTION>April
<OPTION>May
<OPTION>June
<OPTION>July
<OPTION>August
<OPTION>Spetember
<OPTION>October
<OPTION>November
<OPTION>December
</SELECT>
<INPUT TYPE="BUTTON" VALUE="Go" onClick="window.location.href = 'nextpage.html?' +
this.form.selectName.options[this.form.selectName.selectedIndex].text">
</FORM>

在nextpage.html中加入下面的代码
<FORM name="formName"><INPUT TYPE="TEXT" name="textName"><FORM>
<SCRIPT LANGUAGE="JavaScript"><
document.formName.textName.value = location.search.substring(1);
//-SCRIPT>

或则Q?br /> <SCRIPT LANGUAGE="JavaScript"><

86oo_ֽ教程


document.write("<FORM><INPUT TYPE='TEXT' ");
document.write("VALUE='"location.search.substring(1)+"FORM>")
//-SCRIPT>

5?font color="#ff0000">如何一个字W串中的旉和当前时间做比较
<SCRIPT LANGUAGE="JavaScript">
/*其中的日期字W串可有以下格式Q?br />    格式 1 : 19970529
   格式 2 : 970529
   格式 3 : 29/05/1997
   格式 4 : 29/05/97
   输入参数dateType??的数字,表示使用哪种格式.
*/
<!-
function isitToday(dateString,dateType) {
    var now = new Date();
    var today = new Date(now.getYear(),now.getMonth(),now.getDate())

    if (dateType == 1)
        var date = new Date(dateString.substring(0,4),
                            dateString.substring(4,6)-1, http://www.86oo.com
                            dateString.substring(6,8));
    else if (dateType == 2)
        var date = new Date(dateString.substring(0,2),
                            dateString.substring(2,4)-1,
                            dateString.substring(4,6));
    else if (dateType == 3)
        var date = new Date(dateString.substring(6,10),
                            dateString.substring(3,5)-1,

您所览的文章来?6oo.com


                            dateString.substring(0,2));
    else if (dateType == 4)
        var date = new Date(dateString.substring(6,8),
                            dateString.substring(3,5)-1,
                            dateString.substring(0,2));
    else
        return false;

    if (date.toString() == today.toString())
        return true;
    else
        return false;

86oo_ֽ教程


}
调用的例子如下:
if (isitToday("19970529",1)) alert('true'); else alert('false');
if (isitToday("970529",2)) alert('true'); else alert('false');
if (isitToday("29/05/1997",3)) alert('true'); else alert('false');
if (isitToday("02/06/97",4)) alert('true'); else alert('false');
//-
</SCRIPT>

6?font color="#ff0000">如何Ҏ一个h的生日计他的岁?/font>
<SCRIPT LANGUAGE="JavaScript"><
/*其中的日期字W串可有以下格式Q?br />    格式 1 : 19970529
   格式 2 : 970529
   格式 3 : 29/05/1997
   格式 4 : 29/05/97
   输入参数dateType??的数字,表示使用哪种格式.
*/
function getAge(dateString,dateType) {
    var now = new Date();
    var today = new Date(now.getYear(),now.getMonth(),now.getDate())
    var yearNow = now.getYear();
    var monthNow = now.getMonth();
www.86oo.com

    var dateNow = now.getDate();

    if (dateType == 1)
        var dob = new Date(dateString.substring(0,4),
                            dateString.substring(4,6)-1,
                            dateString.substring(6,8));
    else if (dateType == 2)
        var dob = new Date(dateString.substring(0,2),
                            dateString.substring(2,4)-1,
                            dateString.substring(4,6)); 86oo_ֽ教程
    else if (dateType == 3)
        var dob = new Date(dateString.substring(6,10),
                            dateString.substring(3,5)-1,
                            dateString.substring(0,2));
    else if (dateType == 4)
        var dob = new Date(dateString.substring(6,8),
                            dateString.substring(3,5)-1,
                            dateString.substring(0,2));

您所览的文章来?6oo.com


    else
        return '';

    var yearDob = dob.getYear();
    var monthDob = dob.getMonth();
    var dateDob = dob.getDate();

    yearAge = yearNow - yearDob;

    if (monthNow > monthDob)
        var monthAge = monthNow - monthDob;
    else {
        yearAge--;
        var monthAge = 12 + monthNow -monthDob;
    }
    if (dateNow > dateDob)
        var dateAge = dateNow - dateDob;
    else {
        monthAge--;
        var dateAge = 31 + dateNow - dateDob; Ƣ迎各位讉K86oo.com
    }

    return yearAge + ' years ' + monthAge + ' months ' + dateAge + ' days';
}
调用例子
document.write(getAge("19650104",1)+'BR>')
document.write(getAge("650104",2)+'BR>')
document.write(getAge("04/01/1965",3)+'BR>')
document.write(getAge("04/01/65",4)+'BR>')
//-SCRIPT>

7?font color="#ff0000">如何使用下面的格式dd/mm/yy在网中昄日期
<SCRIPT LANGUAGE = 'JavaScript'>
<!-
var date = new Date();
var d  = date.getDate();
var day = (d < 10) ? '0' + d : d;
var m = date.getMonth() + 1;
var month = (m < 10) ? '0' + m : m;
var yy = date.getYear();
var year = (yy < 1000) ? yy + 1900 : yy;

document.write(day + "/" + month + "/" + year);
//-
</SCRIPT>

8?font color="#ff0000">如何使用下面的格式date month year在网中昄日期
<SCRIPT LANGUAGE = 'JavaScript'> 86oo_ֽ教程
<!-
function makeArray() {
     for (i = 0; i<makeArray.arguments.length; i++)
          this[i + 1] = makeArray.arguments[i];
}

var months = new makeArray('January','February','March',
    'April','May','June','July','August','September',
    'October','November','December');

var date = new Date();
var day  = date.getDate();
var month = date.getMonth() + 1;
var yy = date.getYear();
var year = (yy < 1000) ? yy + 1900 : yy;

document.write(day + " " + months[month] + " " + year);
//-
</SCRIPT>

9.如何让我的网늚最q更新日期更易读
<SCRIPT LANGUAGE = 'JavaScript'><
function makeArray0() {
     for (i = 0; i<makeArray0.arguments.length; i++)
          this[i] = makeArray0.arguments[i];

www.86oo.com


}
var days = new makeArray0("Sunday","Monday","Tuesday","Wednesday",
    "Thursday","Friday","Saturday");
var months = new makeArray0('January','February','March',
    'April','May','June','July','August','September',
    'October','November','December');
function nths(day) {
     if (day == 1 || day == 21 || day == 31)
          return 'st';
     else
          if (day == 2 || day == 22)
               return 'nd';
               if (day == 3 || day == 23)
                    return 'rd';

www.86oo.com


               else return 'th';
}
function y2k(number) { return (number < 1000) ? number + 1900 : number; }
var last = document.lastModified;
var date = new Date(last);
document.write("Last updated on " + days[date.getDay()] + ' ' +
    date.getDate() + nths(date.getDate()) + " " +
    months[date.getMonth()] + ", " +
    (y2k(date.getYear()) + "."
//-SCRIPT>

10?font color="#ff0000">如何昄到某个特定日期的倒记?/font>
<SCRIPT LANGUAGE="JavaScript"><
function y2k(number) { return (number < 1000) ? number + 1900 : number; }

function timeTillDate(whenDay,whenMonth,whenYear) {
    var now = new Date();
    var thisDay = now.getDate(), thisMonth = now.getMonth() + 1, thisYear = y2k(now.getYear())
    var yearsDifference = whenYear - thisYear, monthsDifference = 0, daysDifference = 0, string = '';
86oo.com提供各类教程


    if (whenMonth >= thisMonth) monthsDifference = whenMonth - thisMonth;
    else { yearsDifference--; monthsDifference = whenMonth + 12 - thisMonth; }

    if (whenDay >= thisDay)daysDifference = whenDay - thisDay;
    else {
        if (monthsDifference > 0) monthsDifference--;
        else { yearsDifference--; monthsDifference+=11; }
        daysDifference = whenDay + 31 - thisDay;
    }

    if (yearsDifference < 0) return '';

    if ((yearsDifference == 0) && (monthsDifference == 0) && (daysDifference == 0))
        return '';

    if (yearsDifference > 0) {
        string = yearsDifference + ' year';

您所览的文章来?6oo.com


        if (yearsDifference > 1) string += 's';
        string += ' ';
    }

    if (monthsDifference > 0) {
        string += monthsDifference + ' month';
        if (monthsDifference > 1) string += 's';
        string += ' ';
    }
    if (daysDifference > 0) {
        string += daysDifference + ' day';
        if (daysDifference > 1) string += 's';
        string += ' ';
    }

    var difference = Date.UTC(now.getYear(),now.getMonth(),now.getDate(),now.getHours(),now.getMinutes(),now.getSeconds()) - Ƣ迎各位讉K86oo.com
                     Date.UTC(now.getYear(),now.getMonth(),now.getDate(),0,0,0);

    difference = 1000*60*60*24 - difference;

    var hoursDifference = Math.floor(difference/1000/60/60);
    difference = difference - hoursDifference*1000*60*60
    var minutesDifference = Math.floor(difference/1000/60);
    difference = difference - minutesDifference*1000*60
    var secondsDifference = Math.floor(difference/1000);

    if (hoursDifference > 0) {
        string += hoursDifference + ' hour';
        if (hoursDifference > 1) string +='s';
        string += ' ';
    }
86oo.com

    if (minutesDifference > 0) {
        string += minutesDifference + ' minute';
        if (minutesDifference > 1) string +='s';
        string += ' ';
    }

    if (secondsDifference > 0) {
        string += secondsDifference + ' second';
        if (secondsDifference > 1) string +='s';
        string += ' ';
    }
    return string;
}

调用例子Q例如现在到31/12/1999q有多久?br /> document.write(timeTillDate(31,12,1999));
//-SCRIPT>

11?font color="#ff0000">如何从一个日期中减掉几个时
<SCRIPT LANGUAGE = 'JavaScript'><
var date = new Date();
var date = new Date(Date.UTC(date.getYear(),date.getMonth(),date.getDate(),date.getHours(),date.getMinutes(),date.getSeconds()) - 5*60*60*1000);
www.86oo.com

document.write(date);
//-SCRIPT>

12?font color="#ff0000">如何在一个日期中增加几个月后q能够正显C出?/font>
<SCRIPT LANGUAGE="JavaScript"><
function makeArray() {
    for (i = 0; i<makeArray.arguments.length; i++)
        this[i + 1] = makeArray.arguments[i];
}
var months = new makeArray('January','February','March','April',
                           'May','June','July','August','September',
                           'October','November','December');
function nths(day) {
    if (day == 1 || day == 21 || day == 31) return 'st';
    else if (day == 2 || day == 22) return 'nd'; 86oo.com提供各类教程
    else if (day == 3 || day == 23) return 'rd';
    else return 'th';
}
function y2k(number) { return (number < 1000) ? number + 1900 : number; }
function monthsahead(noofmonths) {
    var today = new Date();
    var date = new Date(today.getYear(),today.getMonth() + noofmonths,today.getDate(),today.getHours(),today.getMinutes(),today.getSeconds())
    return date.getDate() + nths(date.getDate()) + ' ' + months[date.getMonth() + 1] + ' ' + y2k(date.getYear())
}

调用例子Q?br /> document.write(monthsahead(6));
//-SCRIPT>


飞鸟 2007-12-14 15:25 发表评论
]]>
Ajax ?XML: 使用 Ajax 实现 lightboxhttp://www.tkk7.com/yczz/articles/162955.html飞鸟飞鸟Sun, 25 Nov 2007 03:59:00 GMThttp://www.tkk7.com/yczz/articles/162955.htmlhttp://www.tkk7.com/yczz/comments/162955.htmlhttp://www.tkk7.com/yczz/articles/162955.html#Feedback0http://www.tkk7.com/yczz/comments/commentRss/162955.htmlhttp://www.tkk7.com/yczz/services/trackbacks/162955.html在这个一切都要求新奇的世界中Q要吸引用户的注意实属不易。了解如何在 Ajax 工具中?lightbox、弹出、窗口和渐变消息之类的新技术吸引用L目光?

q可能是传在都市中的一个传奇故事。很多年之前有人和我说q这样一个用户交互体验。测试者的座位下面塞了 100 金Q而他正在使用计算Z的桌面应用程序。这个应用程序的状态栏中显CZq样一条信息:“在您的位下面有 100 金?#8221;可悲的是Q没有一个参与者能够发C座位下面的钱。这个故事告诉我们状态栏传递信息的效率有多低,而且要吸引用L注意l非易事?

本文介l如何结?PHP、动?HTMLQDHTMLQ和异步?JavaScript + XMLQAjaxQؓ内容增色Q从而真正吸引用L眼球?

工具提示

在浏览器中设|状态栏相当单,但是要实C些有用的功能Q比如说弹出一个工hC)则不是那么容易。考虑到简单性,我选择使用了一个可从网l上免费获得的工hC库Q它构徏于出色的 Prototype.js JavaScript 库之上?a >清单 1 昄了这个工hC的代码?


清单 1. index.html
            <html>
            <head>
            <script src="prototype.js" type="text/javascript"></script>
            <script src="tooltip.js" type="text/javascript"></script>
            <style>
            body { font-family: arial,verdana; }
            .popup { padding:10px; border:1px solid #ccc;
            background:#eee; width:250px; font-size: small; }
            </style>
            </head>
            <body>
            <div id="book1">Code Generation In Action</div>
            <div id="popup1" class="popup">
            </div>
            </body>
            <script type="text/javascript">
            new Ajax.Updater( 'popup1', 'text.php' );
            new Tooltip('book1', 'popup1')
            </script>
            </html>
            

该页面首先用一?Ajax 调用更新工具提示的内容,Ҏ是?Prototype.js 库中?Ajax.Updater cR然后再使用工具提示库所提供?Tooltip cd工具提示分配l?book1 <div> 标记?

清单 2 昄了该工具提示内容的代码?/p>
清单 2. text.php
            An excellent book on code generation and generative programming
            by Jack Herrington.
            

现在Q可以在览器中打开面以查看效果。显C的面??1 所C?


?1. 鼠标未移到文本上
鼠标未移到文本上

当我把鼠标移到文本上Q页面将弹出一个小H口Q如 ?2 所C?


?2. 弹出H口
弹出H口
工具提示的动态演C?/strong>

查看 工具提示单击链接在新H口中查看工hC演C? src= 的在U动态演C?/p>

工具提示是一U整z的面呈现方式Qƈ能根据用L需要显C内宏V如果某个用h了解某项内容的更多信息,只需鼠标移到该内容上便可显Cl信息。这些详l信息可h不同的复杂度Q可以是囑փ、表格和格式化数据?





回页?/strong>


Lightbox

Lightbox 是一U最前沿的创新方法,可以用L注意力集中到面上的某个特定元素。在下面的示例中Q我在页面中d了一个羃略图Q当用户单击它时便会?“lightbox” 中显C出大图?

要创U效果,我将使用极ؓ优秀?Lightbox JS 2.0 库,它同hZ Prototype.js 框架之上?a >清单 3 昄了示例代码?


清单 3. index.html
            <html>
            <head>
            <link rel="stylesheet" href="css/lightbox.css" type="text/css" media="screen" />
            <script src="js/prototype.js" type="text/javascript"></script>
            <script src="js/scriptaculous.js?load=effects" type="text/javascript"></script>
            <script src="js/lightbox.js" type="text/javascript"></script>
            </head>
            <body>
            <a href="images/megan1_400_320.jpg" rel="lightbox">
            <img src="images/megan1_400_320.jpg" width="100" height="80"
            alt="Megan" border="0" /></a>
            </body>
            </html>
            

在浏览器中打开该页面时Q只能看到羃略图Q如 ?3 所C?


?3. 单击~略图之前的昄效果
单击~略图之前的昄效果

当我单击该羃略图Ӟ实际大小的图像将优雅地显C在H口中央Q如 ?4 所C?


?4. 昄实际大小囑փ?lightbox
昄实际大小囑փ?lightbox

此外Q背景中的所有其他内容将变成灰色Q这L户将更容易注意到面中间昄的内宏V?

lightbox 的动态演C?/strong>

查看 lightbox单击链接在新H口中查看工hC演C? src= 的在U动态演C?/p>

如果您对 lightbox q个术语q不太熟悉也没有关系Q因为它是摄p业中的一个相当深奥的词汇。在q去胶片摄媄的时代,lightbox 是一?6 英寸高,长宽皆ؓ几英的盒子形状的设备,剙涂有塑性白漆,盒子中间的小灯可以ؓ整个表面提供照明。因此, 我们可以灯片和底片放?lightbox 上,然后使用一U小型放大镜来检查图像。您可以认ؓ?4 中的效果是在通过 lightbox 上的攑֤镜查看照片。因此,lightbox 的术语便从此而来?

但是Q是否可以将囑փ换成文本Qƈ实现同样的效果呢Q?

文本 lightbox

Particle Tree q个站点׃用这U与众不同的Ҏ实现?lightbox。此Ҏ的优点便是可以显CZ?Ajax 从服务器获取的Q?HTML 代码。我用这U方法将额外的文本显C给用户?

清单 4 昄了主代码?/p>
清单 4. index.html
            <html>
            <head>
            <title>
            Lightbox Text Test
            </title>
            <link rel="stylesheet" href="css/default.css" media="screen,projection" type="text/css" />
            <link rel="stylesheet" href="css/lightbox.css" media="screen,projection"
            type="text/css" />
            <script type="text/javascript" src="scripts/prototype.js"></script>
            <script type="text/javascript" src="scripts/lightbox.js"></script>
            </head>
            <body>
            <a href="text.php" class="lbOn">More About This Article</a>
            </body>
            </html>
            

清单 5 中的 HTML 代码通过 Ajax 获取q后显C给用户?


清单 5. text.php
            <p>This article covers the basics of AJAX Lightbox that
            shows text blocks instead of images</p>
            <p><a href="#" class="lbAction" rel="deactivate">
            Return to article list</a></p>
            

以上代码在浏览器中的昄效果??5 所C?/p>
?5. 单击文本便可获得更多信息
单击文本便可获得更多信息

当我单击文本Ӟ可以看到面内容突出显C出来。请参见 ?6?


?6. q行中的文本 lightbox
q行中的文本 lightbox
文本 lightbox 的动态演C?/strong>

查看 文本 lightbox单击链接在新H口中查看工hC演C? src= 的在U动态演C?/p>

q种Ҏ可以为页面上列出的品或文章昄额外信息Q而不必用户d当前面。相反,您将间接地将用户的注意力转移到这些内容上。与 HTML 代码一Pq些信息可以包括更多的文本内宏V图像,或者甚x表单Q比如说注册、评论或d表单Q?





回页?/strong>


H口

我在上一CZ中提到过使用 lightbox 昄表单Q但是这q不是用户在使用表单时真正需要的。他们真正需要的是窗口。所q的是,Prototype 库提供了一个极好的H口实现Q该H口实现h各种不同的皮肤可满您的需要?

H口代码q将使用 Ajax 通过 Prototype 获取在H口框架中显C的内容。首先,开发托窗口的基本面Q如 清单 6 所C?


清单 6. index.html
            <html>
            <head>
            <script type="text/javascript" src="javascripts/prototype.js"></script>
            <script type="text/javascript" src="javascripts/effects.js"></script>
            <script type="text/javascript" src="javascripts/window.js"></script>
            <script type="text/javascript" src="javascripts/window_effects.js"></script>
            <link href="themes/default.css" rel="stylesheet" type="text/css" ></link>
            <link href="themes/spread.css" rel="stylesheet" type="text/css" ></link>
            </head>
            <body>
            <a href="javascript:void showWindow();">Show Window</a>
            <script>
            function showWindow()
            {
            win = new Window( { className: 'spread', url: 'test.html',
            title: 'Simple Window', width:400,
            height:300, destroyOnClose: true, recenterAuto:false } );
            win.showCenter();
            }
            </script>
            </body>
            </html>
            

此处?JavaScript 代码响应单?Show window 按钮的操作,l果是创Z个具有指定宽度、高度、标题和内容Q内容由特定?URL 指定Q的H口。然后?showCenter() Ҏ昄H口Q窗口将昄在在览器窗口的中部?

清单 7 昄了窗口的内容?/p>
清单 7. test.html
            <h1>Registration</h1>
            <p>You need to first register the product before...</p>
            

该页面在览器的昄效果??7 所C?


?7. H口链接
H口链接

面中ƈ没有什么内容,但是单击H口链接之后却是另一番景艌Ӏ如 ?8 所C?


?8. 弹出H口
弹出H口

有点华而不实的感觉Q但是它实可以吸引用户的注意力。除了石灰绿之外Q您q可以选择一些不同的皮肤?

但是我真正想要的是弹单,不是吗?我特别想在主上实现一个登录表单,当我单击 Login 按钮时便会弹Z个登录表单?a >清单 8 昄了主늚代码?


清单 8. form.php
            <html>
            <head>
            <script type="text/javascript" src="javascripts/prototype.js"></script>
            <script type="text/javascript" src="javascripts/effects.js"></script>
            <script type="text/javascript" src="javascripts/window.js"></script>
            <script type="text/javascript" src="javascripts/window_effects.js"></script>
            <link href="themes/default.css" rel="stylesheet" type="text/css" ></link>
            <link href="themes/spread.css" rel="stylesheet" type="text/css" ></link>
            </head>
            <body>
            <div id="myloginform" style="display:none;overflow:clip;padding:10px;">
            <form id="loginfrm">
            <table>
            <tr><td>Login</td><td><input type="text" name="name" /></td></tr>
            <tr><td>Password</td><td><input type="password" name="password" /></td></tr>
            </table>
            </form>
            <button onclick="login()">Login</button>
            </div>
            <a href="javascript:void showWindow();">Login</a>
            <script>
            var g_loginWindow = null;
            function login()
            {
            new Ajax.Request( 'login.php', {
            parameters: $('loginfrm').serialize(),
            method: 'post',
            onSuccess: function( transport ) {
            g_loginWindow.close();
            }
            } );
            }
            function showWindow()
            {
            g_loginWindow = new Window( { className: 'spread', title: "Login",
            destroyOnClose: true,
            onClose:function() { $('myloginform').style.display = 'none'; } } );
            g_loginWindow.setContent( 'myloginform', true, true );
            g_loginWindow.showCenter();
            }
            </script>
            </body>
            </html>
            

q次Q窗口的内容直接存攑֜面中。但是,当用户单击表单上?Login 按钮Ӟ面?Ajax.Request 对象向服务器hd表单?a >清单 9 昄了这个简单的d脚本Q实际中的实现将q没有这么简单?


清单 9. login.php
            <true />
            

q时Q当我在览器中打开该页面时看C个登录链接,??9 所C?


?9. login 链接
login 链接

当我单击该链接时Q将看到一个非帔R?Web 2.0 样式的登录窗口,??10 所C?


?10. login H口
login H口
H口的动态演C?/strong>

查看 H口单击链接在新H口中查看窗口演C? src= 的在U动态演C?/p>

当用户单?Login 按钮Ӟ面把用户名和密码发送给服务器。然后,服务器将验证凭证q徏立一个会?cookieQƈ回复响应Q指C页面返回主c?

实际上,此类功能可以在应用程序中实现弹出H口Qƈ让用h觉自׃佛更像是在用桌面应用程序,而不是在讉K Web 面?





回页?/strong>


渐变消息

与用户通信的另一U新Ҏ?em>渐变消息 ?也就是,q种消息在屏幕的一个重要位|弹出,告诉用户某些重要的事情。在本例中,我将使用 Scriptaculous 效果库(它也构徏?Prototype.js 之上Q实现渐变消息。?

首先Q我们从 清单 10 开始?/p>
清单 10. index.html
            <html><head>
            <style>
            .alert {
            opacity: 0.0;
            border:2px dashed black;
            padding:5px;
            background:#eee;
            font-family: arial, verdana;
            font-weight: bold; }
            </style>
            <script src="lib/prototype.js"></script>
            <script src="src/effects.js"></script>
            <script>
            function submit()
            {
            new Ajax.Updater( 'result', 'alert.html', {
            method: 'get',
            onSuccess: function() {
            new Effect.Opacity('result',
            { duration: 2.0, from: 0.0, to: 1.0 } );
            new Effect.Opacity('result',
            { delay: 10.0, duration: 2.0, from: 1.0, to: 0.0 } );
            } }
            );
            }
            </script>
            </head><body>
            <div id="result" class="alert"></div><br/><br/>
            <button onclick="submit()">Submit</button>
            </body></html>
            

在理x况下Q该面有点cM含有 Submit 按钮的表单。然后,当用户单?Submit 按钮Ӟ服务器接收到提交的表单数据后返回一个消息。这个消息将H出昄在某个位|,然后效果渐渐减弱。在本例中,我省M表单元素Q因此页面中只有一?Submit 按钮?

Submit 按钮?Ajax h发送给 alert.html 面。然后,该面的结果存攑֜ result <div> 标记中,Scriptaculous 效果cd以该标记显CZؓ渐变效果?

清单 11 昄?alert 面的代码?/p>
清单 11. alert.html
            A new record has been added.
            

该页面中览器中的显C效果如 ?11 所C?/p>
?11. 表单?Submit 按钮
表单?Submit 按钮

q是一P面中ƈ没有什么内宏V可以考虑?Submit 按钮上面加入一些含有数据的表单字段?

当我单击 Submit 按钮Ӟ面突出显C告提C,??12 所C?/p>
?12. 渐变效果的消?
渐变效果的消? src=
渐变效果的动态演C?/strong>

查看 渐变单击链接在新H口中查看渐变效果演C? src= 的在U动态演C?/p>

几秒钟之后,消息逐渐消失?/p>

q种与用户交互的方式虽然单,但是十分有效。只要别q度使用Q它可以直接让用h受到对象的出现和消失。这是hcM生俱来的本能。因此,您会自然地注意到。只要能够合理地使用q些技巧,吸引用户的注意力不再困难?

分nq篇文章……

digg 本文提交到 Digg
del.icio.us 发布?del.icio.us

l束?/span>

希望本文中的工具可以让您通过创新的方式实C互和提示。随着旉的推U,我确信这些技巧将q度使用Qƈ最l落得与状态栏一L下场。但是在开始阶D,q些工具提供一U有、有效且W合 Web 2.0 的吸引用h意的方式?/p>

飞鸟 2007-11-25 11:59 发表评论
]]>
Ajax ?XML: ?Ajax 用于多媒?/title><link>http://www.tkk7.com/yczz/articles/162953.html</link><dc:creator>飞鸟</dc:creator><author>飞鸟</author><pubDate>Sun, 25 Nov 2007 03:58:00 GMT</pubDate><guid>http://www.tkk7.com/yczz/articles/162953.html</guid><wfw:comment>http://www.tkk7.com/yczz/comments/162953.html</wfw:comment><comments>http://www.tkk7.com/yczz/articles/162953.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/yczz/comments/commentRss/162953.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/yczz/services/trackbacks/162953.html</trackback:ping><description><![CDATA[<blockquote>宽带、媒体、电影、图像和声音{技术的出现推动?Web 2.0 的发展。了解如何把多媒体与 PHP ?Asynchronous JavaScript™ + XMLQAjaxQ结合v来创造o目一新的体验?/blockquote><!--start RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters --><!--end RESERVED FOR FUTURE USE INCLUDE FILES--> <p>如果问哪一个网站最能代?Web 应用E序的新潮流Q多Ch会回{?YouTube。这个网站不仅仅U极接纳新技术营造出梦效果Q而且改变了我们对多媒体的看法Q改变了我们和媒体的关系。许多故事在以传l媒体渠道传播之前就已经出现?YouTube 上了Q当它们不再传ӞYouTube ׃像全世界的一个巨大的 TivoQ记录着曄发生的点Ҏ滴?</p> <p>媒体分n正在改变世界Q而且从技术的观点来说Q这q不隑ց到。本文介l如何在 Web 视频托管应用E序上增加一?Ajax 前端?</p> <p><a name="N1007D"><span id="2s442s4" class="atitle">单的视频选择</span></a></p> <p>首先来看|站Q网站上有一个电影列表可供选择 ?一个不用改变页面就能选择不同电媄的网站。页面代码如 <a >清单 1</a> 所C?</p> <br /> <a name="list1"><strong>清单 1. index.html</strong></a><br /> <table cellspacing="0" cellpadding="0" width="100%" border="0"> <tbody> <tr> <td class="code-outline"> <pre class="displaycode"> <html> <head> <script src="prototype.js"></script> </head> <body> <div id="movieHost"> </div> <div id="movieList"> </div> <script> function setMovie( url ) { $('movieHost').innerHTML = ''; var elEmbed = document.createElement( 'embed' ); elEmbed.src = url; $('movieHost').appendChild( elEmbed ); } new Ajax.Request( 'movies.xml', { method: 'get', onSuccess: function( transport ) { var movieTags = transport.responseXML.getElementsByTagName( 'movie' ); $('movieList').innerHTML = ''; var bFirst = true; for( var b = 0; b < movieTags.length; b++ ) { var url = movieTags[b].getAttribute('url'); var title = movieTags[b].getAttribute('title'); if ( bFirst ) { setMovie( url ); bFirst = false; } var html = '<a href="javascript:void setMovie(\''+url+'\');">'; html += title+'</a><br/>'; $('movieList').innerHTML += html; } } } ); </script> </body> </html> </pre> </td> </tr> </tbody> </table> <br /> <p>该页面?Prototype.js q个很棒?JavaScript 库向 movies.xml 数据源发?Ajax h。返回数据后通过 <code>getElementsByTagName()</code> Ҏ查找所有电影标{。对每个电媄标签Q代码检?URL 和标题。如果检索的标签是列表中的第一部电影,脚本立即开始放映这部电影。否则添加一?anchor 标签作ؓ <code>movieList <div></code> 的电影选择器?</p> <p>电媄选择?anchor 调用 <code>setMovie()</code> 函数打开指定的电影。播攄qҎ很简单,首先?<code>movieHost <div></code> 标签|空Q即删除原来的电影。然后将内容讄?<code><embed></code> 标签Q其 URL q影列表指定?</p> <p><code><embed></code> 标签是在面中播攄影最单的ҎQ但是存在跨览器的问题。另一U办法是同时使用 <code><object></code> ?<code><embed></code> 标签Q还有一U办法,即?Macromedia Flash PlayerQ?a >本文E后</a> 再讨论)?</p> <p>q个单的例子中,movies.xml 只是一个^面文Ӟ包含一些我自己的家庭短片的引用。该文g?<a >清单 2</a> 所C?</p> <br /> <a name="list2"><strong>清单 2. movies.xml</strong></a><br /> <table cellspacing="0" cellpadding="0" width="100%" border="0"> <tbody> <tr> <td class="code-outline"> <pre class="displaycode"> <movies> <movie url="spider.mov" title="Spider" /> <movie url="swing.mov" title="Swing Set" /> <movie url="water.mov" title="Water Splash" /> </movies> </pre> </td> </tr> </tbody> </table> <br /> <p>打开该页面时Q显C的l果?<a >?1</a> 所C?/p> <br /> <a name="fig1"><strong>?1. 单的电媄列表面</strong></a><br /> <img height="276" alt="单的电媄列表面" src="http://www.ibm.com/developerworks/cn/xml/x-ajaxxml7/index_400_304.jpg" width="377" /> <br /> <p>最上方是一部由 <code><embed></code> 标签播放的电影,下面是其他媄片列表。点d中的M链接Q正在播攄电媄变成所选择的电影?</p> <p>昄Q这个系l不适合大型的视频资料库Q还需要对q列表q行某种搜烦?</p> <br /> <table cellspacing="0" cellpadding="0" width="100%" border="0"> <tbody> <tr> <td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /><br /> <img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" /></td> </tr> </tbody> </table> <table class="no-print" cellspacing="0" cellpadding="0" align="right"> <tbody> <tr align="right"> <td><img height="4" alt="" src="http://www.ibm.com/i/c.gif" width="100%" /><br /> <table cellspacing="0" cellpadding="0" border="0"> <tbody> <tr> <td valign="middle"><img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" /><br /> </td> <td valign="top" align="right"><a class="fbox" ><strong>回页?/strong></a></td> </tr> </tbody> </table> </td> </tr> </tbody> </table> <br /> <br /> <p><a name="N100F2"><span id="kosii44" class="atitle">可搜索的电媄列表</span></a></p> <p>要添加搜索功能,必须d一个搜索框Q如 <a >清单 3</a> 所C。其中增加了搜烦输入字段 <code>q</code>?</p> <br /> <a name="list3"><strong>清单 3. d搜烦功能</strong></a><br /> <table cellspacing="0" cellpadding="0" width="100%" border="0"> <tbody> <tr> <td class="code-outline"> <pre class="displaycode"> <html> <head> <script src="prototype.js"></script> </head> <body> <table><tr><td valign="top"> <input type="text" id="q" onkeyup="search()"> <div id="movieList"> </div> </td><td valign="top"> <div id="movieHost"> </div> </td> </tr></table> <script> function setMovie( url ) { $('movieHost').innerHTML = ''; var elEmbed = document.createElement( 'embed' ); elEmbed.src = url; $('movieHost').appendChild( elEmbed ); } function search() { new Ajax.Request( 'search.php?q='+escape($('q').value), { method: 'get', onSuccess: function( transport ) { var movieTags = transport.responseXML.getElementsByTagName( 'movie' ); $('movieList').innerHTML = ''; var bFirst = true; for( var b = 0; b < movieTags.length; b++ ) { var url = movieTags[b].getAttribute('url'); var title = movieTags[b].getAttribute('title'); if ( bFirst ) { setMovie( url ); bFirst = false; } var html = '<a href="javascript:void setMovie(\''+url+'\');">'; html += title+'</a><br/>'; $('movieList').innerHTML += html; } } } ); } </script> </body> </html> </pre> </td> </tr> </tbody> </table> <br /> <p>?key-up 事g中指?<code>search()</code> Ҏ被调用?code>search()</code> Ҏ?<code>Ajax.Request</code> 调用cMQ除了向 search.php 面传递查询字W串。search.php 脚本q回和原来相同的 XML 格式Q因此不需要修?XML 解析的代码?</p> <p>我承认对于自q习惯来说Qkey-up 上的 <code>search()</code> 函数反映有点太快。理x况下Q系l应该在执行搜烦之前{待一U左右以便输入完整的搜烦文本Q避免列表不停地闪烁。?<code>window.setTimeout()</code> Ҏ很容易实现这U行为?</p> <p><a >清单 4</a> 昄了经q修改的 search.php 脚本?/p> <br /> <a name="list4"><strong>清单 4. search.php</strong></a><br /> <table cellspacing="0" cellpadding="0" width="100%" border="0"> <tbody> <tr> <td class="code-outline"> <pre class="displaycode"> <?php header( 'content-type: text/xml' ); $movies = array(); $movies['spider.mov'] = 'Spider'; $movies['swing.mov'] = 'Swing Set'; $movies['water.mov'] = 'Water Splash'; ?> <movies> <?php foreach( $movies as $k => $v ) { if ( strlen( $_GET['q'] ) > 0 && preg_match( '/'.$_GET['q'].'/i', $v ) ) { ?> <movie url="<?php echo($k) ?>" title="<?php echo($v) ?>" /> <?php } } ?> </movies> </pre> </td> </tr> </tbody> </table> <br /> <p>脚本一开始徏立了一个数l保存全部电影。ؓ了简化v见,q里对电p行了编码。实际应用的时候这些元素很可能取自电媄清单的数据库?</p> <p>接下来的代码遍历列表Q把搜烦查询的正则表辑ּ应用于每个电q标题。如果匹配则输出包含 URL 和名U的 <code><movie></code> 标签?</p> <p>打开面q输?<code>s</code>Q将看到 <a >?2</a> 所C的面?</p> <br /> <a name="fig2"><strong>?2. 单的电媄查询面 </strong></a><br /> <img height="275" alt="单的电媄查询面" src="http://www.ibm.com/developerworks/cn/xml/x-ajaxxml7/index2_1_400_299.jpg" width="375" /> <br /> <p>如果按下 Delete 建ƈ输入 <code>water</code>Q就会看?<a >?3</a> 所C的面?</p> <br /> <a name="fig3"><strong>?3. 搜烦?“water” 相关的电q查询面 </strong></a><br /> <img height="274" alt="搜烦?“water” 相关的电q查询面" src="http://www.ibm.com/developerworks/cn/xml/x-ajaxxml7/index2_2_400_297.jpg" width="373" /> <br /> <p>虽然本文主要讨论如何使用 Dynamic HTMLQDHTMLQ和 Ajax 建立前端应用E序Q但视频׃n|站决不是这么简单?</p> <br /> <table cellspacing="0" cellpadding="0" width="100%" border="0"> <tbody> <tr> <td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /><br /> <img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" /></td> </tr> </tbody> </table> <table class="no-print" cellspacing="0" cellpadding="0" align="right"> <tbody> <tr align="right"> <td><img height="4" alt="" src="http://www.ibm.com/i/c.gif" width="100%" /><br /> <table cellspacing="0" cellpadding="0" border="0"> <tbody> <tr> <td valign="middle"><img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" /><br /> </td> <td valign="top" align="right"><a class="fbox" ><strong>回页?/strong></a></td> </tr> </tbody> </table> </td> </tr> </tbody> </table> <br /> <br /> <p><a name="N10176"><span id="2ua4y4g" class="atitle">视频分n基础</span></a></p> <p>先暂时离开实践问题讨论一些更L论性的东西Q视频共享中更加复杂的问题。涉及到三个主要问题Q?</p> <ul> <li>如何存储和传输视? <li>如何处理不同的视频格? <li>如何从上传文件中获得~略囑֒视频信息 </li> </ul> <p>视频存储是一个实实在在的问题 ?特别是对于小应用E序而言视频文g非常大,需要大定w的硬盘空间来存储。将其传递给客户q面临着带宽的挑战。可以自p买设备安装到托管设施中。或者?Amazon S3 q样的服务,只需很低的h格就能上传Q何资料(数据库备份、图片、电q{)?Amazon 数据中心Q以及提供给其他客户。和建立数据中心的大量投资相比可以先考虑一下这些服务?</p> <p>下一个问??视频格式 ?提出了一个有的挑战。存在多U视频格式,没有M一U播攑֙能支持所有格式。事实上多数播放器只能处理自己挑选的视频格式。ؓ了方便用P也许最好以某种格式为标准然后将所有传来的视频都{化成q种格式。有一U非常方便的工具Q即命o行应用程?<em>FFmpeg</em>。它不仅能把一U视频格式{化成另一U,q能拑֏画面的快照从而ؓ用户提供视频~略图?</p> <p><a name="flashmedia">选择何种视频格式</a>作ؓ标准可能很麻烦。目?Flash 视频h明显的优势,但是 Windows Media®Q特别是随着 Microsoft SilverlightQ原来的 WPF/EverywhereQ的发布Q正在赢得越来越多的支持。FFmpeg 几乎能将Mq格式转化?Flash 视频格式Q这一点很吸引人。而且有一些免费和开源的 Flash 播放器很Ҏ嵌入到网站上。将q些播放器和上述代码l合hp建立一个完整的、以 Ajax 为前端的端到端视频分享解x案?</p> <p>?Web 上不仅仅有视频,囑փ׃n也很重要?</p> <br /> <table cellspacing="0" cellpadding="0" width="100%" border="0"> <tbody> <tr> <td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /><br /> <img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" /></td> </tr> </tbody> </table> <table class="no-print" cellspacing="0" cellpadding="0" align="right"> <tbody> <tr align="right"> <td><img height="4" alt="" src="http://www.ibm.com/i/c.gif" width="100%" /><br /> <table cellspacing="0" cellpadding="0" border="0"> <tbody> <tr> <td valign="middle"><img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" /><br /> </td> <td valign="top" align="right"><a class="fbox" ><strong>回页?/strong></a></td> </tr> </tbody> </table> </td> </tr> </tbody> </table> <br /> <br /> <p><a name="N101A5"><span id="wsmceom" class="atitle">qȝ片放?/span></a></p> <p><a >清单 5</a> 昄了一个简单的Z DHTML 的灯片Q数据来?XML 文g?</p> <br /> <a name="list5"><strong>清单 5. index.html</strong></a><br /> <table cellspacing="0" cellpadding="0" width="100%" border="0"> <tbody> <tr> <td class="code-outline"> <pre class="displaycode"> <html> <head> <script src="prototype.js"></script> </head> <body bgcolor="black"> <div style="text-align:center;"> <img id="imgItem" src="" style="display:none;"><br> <div id="imgTitle" style="color:white;font-family:arial;font-size:24pt;"> </div> </div> <script> var g_images = []; var g_slideIndex = 0; function showSlide() { $('imgTitle').hide(); $('imgItem').hide(); var height = 600; var width = ( height / g_images[ g_slideIndex ].height ) * g_images[ g_slideIndex ].width; $('imgItem').src = g_images[ g_slideIndex ].src; $('imgItem').width = width; $('imgItem').height = height; $('imgTitle').innerHTML = g_images[ g_slideIndex ].title; $('imgTitle').show(); $('imgItem').show(); g_slideIndex++; if ( g_slideIndex >= g_images.length ) g_slideIndex = 0; } new Ajax.Request( 'images.xml', { method: 'get', onSuccess: function( transport ) { var imageTags = transport.responseXML.getElementsByTagName( 'image' ); for( var b = 0; b < imageTags.length; b++ ) { g_images.push( { src: imageTags[b].getAttribute('src'), title: imageTags[b].getAttribute('title'), width: imageTags[b].getAttribute('width'), height: imageTags[b].getAttribute('height') } ); } showSlide(); window.setInterval( showSlide, 5000 ); } } ); </script> </body> </html> </pre> </td> </tr> </tbody> </table> <br /> <table cellspacing="0" cellpadding="0" width="150" align="right" border="0"> <tbody> <tr> <td width="10"><img height="1" alt="" src="http://www.ibm.com/i/c.gif" width="10" /></td> <td> <table cellspacing="0" cellpadding="5" width="100%" border="1"> <tbody> <tr> <td bgcolor="#eeeeee"><a name="N101C2"><strong>分nq篇文章……</strong></a><br /> <p> <table cellspacing="0" cellpadding="0" width="135" border="0"> <tbody> <tr> <td colspan="2"><img height="5" alt="" src="http://www.ibm.com/i/c.gif" width="1" border="0" /> </td> </tr> <tr valign="top" align="left"> <td width="21"><a ><img height="10" alt="digg" src="http://www.ibm.com/i/v14/icons/10x10-digg-thumb.gif" width="10" border="0" /> </a></td> <td><a >提交?Digg</a> </td> </tr> <tr> <td colspan="2"><img height="5" alt="" src="http://www.ibm.com/i/c.gif" width="1" border="0" /> </td> </tr> <tr valign="top" align="left"> <td width="21"><a onclick="window.open('http://del.icio.us/post?v=4&noui&jump=close&url='+encodeURIComponent(location.href)+'&title='+encodeURIComponent(document.title), 'delicious','toolbar=no,width=700,height=400'); return false;" ><img height="10" alt="del.icio.us" src="http://del.icio.us/static/img/delicious.small.gif" width="10" border="0" /> </a></td> <td><a onclick="window.open('http://del.icio.us/post?v=4&noui&jump=close&url='+encodeURIComponent(location.href)+'&title='+encodeURIComponent(document.title), 'delicious','toolbar=no,width=700,height=400'); return false;" >发布?del.icio.us</a> </td> </tr> <tr> <td colspan="2"><img height="5" alt="" src="http://www.ibm.com/i/c.gif" width="1" border="0" /> </td> </tr> <tr valign="top" align="left"> <td width="21"><a href="javascript:location.><img height="16" alt="Slashdot" src="http://www.ibm.com/developerworks/i/slashdot-favicon.gif" width="16" border="0" /> </a></td> <td><a href="javascript:location.>提交?SlashdotQ?/a> </td> </tr> <tr> <td colspan="2"><img height="5" alt="" src="http://www.ibm.com/i/c.gif" width="1" border="0" /> </td> </tr> </tbody> </table> </p> </td> </tr> </tbody> </table> </td> </tr> </tbody> </table> <p>上述代码需要用?Prototype.js JavaScript 库。利?<code>Ajax.Request</code> 对象获得要显C的囄列表。然后解析返回的 XML 代码Q获得图片的 URL、宽、高和标题。然后调?<code>showSlide()</code> 函数得到qȝ片显C效果。设|的计时器每五秒切换C一张灯片?</p> <p>qȝ片放映通过包含当前囄?<code><image></code> 标签和标?<code><div></code> 标签实现。所谓放映只不过是隐藏当前的囄和标题,图片来源和标题文本讄为新qȝ片的内容q显C。如果需要某UE入E出效果,使用 Scriptaculous 库中?<code>Effects</code> c,它是构徏?Prototype.js 上的?</p> <p><a >清单 6</a> 昄了数据图像文件?/p> <br /> <a name="list6"><strong>清单 6. images.xml</strong></a><br /> <table cellspacing="0" cellpadding="0" width="100%" border="0"> <tbody> <tr> <td class="code-outline"> <pre class="displaycode"> <images> <image src="images/megan1_875_700.jpg" title="Megan" width="875" height="700" /> <image src="images/oso1_875_700.jpg" title="Oso 1" width="875" height="700" /> <image src="images/oso2_873_700.jpg" title="Oso 2" width="873" height="700" /> </images> </pre> </td> </tr> </tbody> </table> <br /> <p>q里虽然使用了硬~码Q但使用 PHP 脚本很容易生?XML 代码。灯片放映?<a >?4</a> 所C?</p> <br /> <a name="fig4"><strong>?4. 单的qȝ片放?/strong></a><br /> <img height="320" alt="单的qȝ片放? src="http://www.ibm.com/developerworks/cn/xml/x-ajaxxml7/slideshow_400_333.jpg" width="388" /> <br /> <p><strong>注意Q?/strong>我以前介l过一个更加精l的qȝ片放映版本(要获得相关链接,参见<a >参考资?/a>Q。现在这个版本的区别在于使用?Prototype.js 库,各灯片之间的切换更单?</p> <br /> <table cellspacing="0" cellpadding="0" width="100%" border="0"> <tbody> <tr> <td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /><br /> <img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" /></td> </tr> </tbody> </table> <table class="no-print" cellspacing="0" cellpadding="0" align="right"> <tbody> <tr align="right"> <td><img height="4" alt="" src="http://www.ibm.com/i/c.gif" width="100%" /><br /> <table cellspacing="0" cellpadding="0" border="0"> <tbody> <tr> <td valign="middle"><img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" /><br /> </td> <td valign="top" align="right"><a class="fbox" ><strong>回页?/strong></a></td> </tr> </tbody> </table> </td> </tr> </tbody> </table> <br /> <br /> <p><a name="N102B3"><span id="2yw4qkg" class="atitle">l束?/span></a></p> <p>?Flikr ?YouTube 之类的网站仅仅显CZ Web 上的多媒体应用的巨大潜能的冰׃角。本文介l了一些非常简便的视频和图片浏览的实现Q可用于您自q目。如果有效,请参?developerWorks Ajax 论坛Q参?<a >参考资?/a>Q告诉我您取得的成功?</p> <img src ="http://www.tkk7.com/yczz/aggbug/162953.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/yczz/" target="_blank">飞鸟</a> 2007-11-25 11:58 <a href="http://www.tkk7.com/yczz/articles/162953.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>FCKEditor使用说明http://www.tkk7.com/yczz/articles/158024.html飞鸟飞鸟Sun, 04 Nov 2007 02:41:00 GMThttp://www.tkk7.com/yczz/articles/158024.htmlhttp://www.tkk7.com/yczz/comments/158024.htmlhttp://www.tkk7.com/yczz/articles/158024.html#Feedback0http://www.tkk7.com/yczz/comments/commentRss/158024.htmlhttp://www.tkk7.com/yczz/services/trackbacks/158024.html 1. FCKeditor 介绍
FCKeditor q个开源的HTML 文本~辑器可以让web E序拥有如MS Word q样强大的编辑功
?FCKeditor 支持当前行的浏览器如IE 5.5+, Firefox 1.0+, Mozilla 1.3+与Netscape 7+{?br />

FCKeditor官司方网址Qhttp://www.fckeditor.net/

FCKeditor在线DEMOQ?a >http://www.fckeditor.net/demo

FCKeditor下蝲直址Q?a >http://www.fckeditor.net/download (该版本ؓ2.3.2)Q最新版已经?.4了?/p>

2.FCKeditor.java介绍

不能直接在JSP目中用,需要FCKeditor.java库的支持?/p>

FCKeditor.java是针对对JAVA中用FCKeditor由Simone Chiaretta开发的FCKeditor的JAVA实现?/p>

下蝲地址Q?a >http://www.fckeditor.net/download (最q版本ؓ2.3)

3.?/span>JAVA目中?/span>FCKeditor在线~辑?/span>

开发环境:JDK5.0 Q?lt;!--[if !supportLists]--> Eclipse3.2.1 + WTP1.5.2

Q?Q新Z?/span>WEB工程Q?/p>


Q?Q?/strong>解压 FCKeditor_2.3.2.zip包,其中的 edit 文g夹到目中的 WebRoot 目录

Q?Q?/strong>解压 FCKeditor_2.3.2.zip 包,其中的 fckconfig.js、fckeditor.js、fckstyles.xml、fcktemplates.xml 文g夹到目中的 WebRoot 目录

Q?Q?/strong>解压 FCKeditor.java-2.3.zip 包,其中的 "web"WEB-INF"lib 下的两个 jar 文g到项目的 WebRoot"WEB-INF"lib 目录

Q?Q?/strong>解压 FCKeditor.java-2.3.zip 包,其中的 "src 下的 FCKeditor.tld 文g到项目的 WebContent"WEB-INF 目录

Q?Q?/strong>删除 WebContent"edit 目录下的 _source 文g夹(?#8220;_”开始的文gQ在目中无用)

完成后的目录l构下如Q?br />

说明Q图中的input.jsp和display.jsp两个是我写的试集成FCKeditor的JSP文g?/span>

  • 修改WebContent/WEB-INF/web.xml文gQ加入FCKeditor的配|信息,如下Q?
xml 代码
 
  1. xml version="1.0" encoding="UTF-8"?>  
  2. <web-app id="WebApp_ID" version="2.4"  
  3.     xmlns="http://java.sun.com/xml/ns/j2ee"  
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  
  6.     <display-name>FCKeditor<!--</span-->display-name>  
  7.     <servlet>  
  8.         <servlet-name>Connector<!--</span-->servlet-name>  
  9.         <servlet-class>  
  10.             com.fredck.FCKeditor.connector.ConnectorServlet  
  11.         <!--</span-->servlet-class>  
  12.         <init-param>  
  13.             <param-name>baseDir<!--</span-->param-name>  
  14.             <!-- 此ؓ文g览路径 -->  
  15.             <param-value>/UserFiles/<!--</span-->param-value>  
  16.         <!--</span-->init-param>  
  17.         <init-param>  
  18.             <param-name>debug<!--</span-->param-name>  
  19.             <param-value>true<!--</span-->param-value>  
  20.         <!--</span-->init-param>  
  21.         <load-on-startup>1<!--</span-->load-on-startup>  
  22.     <!--</span-->servlet>  
  23.     <servlet>  
  24.         <servlet-name>SimpleUploader<!--</span-->servlet-name>  
  25.         <servlet-class>  
  26.             com.fredck.FCKeditor.uploader.SimpleUploaderServlet  
  27.         <!--</span-->servlet-class>  
  28.         <init-param>  
  29.             <param-name>baseDir<!--</span-->param-name>  
  30.             <!-- 此ؓ文g上传路径Q需要在WebRoot 目录下新?nbsp;UserFiles 文g?nbsp;-->  
  31.             <!-- Ҏ文g的类型还需要新建相关的文g?nbsp;Image、Flash -->  
  32.             <param-value>/UserFiles/<!--</span-->param-value>  
  33.         <!--</span-->init-param>  
  34.         <init-param>  
  35.             <param-name>debug<!--</span-->param-name>  
  36.             <param-value>true<!--</span-->param-value>  
  37.         <!--</span-->init-param>  
  38.         <init-param>  
  39.             <!-- 此参Cؓ是否开启上传功?nbsp;-->  
  40.             <param-name>enabled<!--</span-->param-name>  
  41.             <param-value>false<!--</span-->param-value>  
  42.         <!--</span-->init-param>  
  43.         <init-param>  
  44.             <param-name>AllowedExtensionsFile<!--</span-->param-name>  
  45.             <param-value><!--</span-->param-value>  
  46.         <!--</span-->init-param>  
  47.         <init-param>  
  48.             <!-- 此参Cؓ文gqoQ以下的文gcd都不可以上传 -->  
  49.             <param-name>DeniedExtensionsFile<!--</span-->param-name>  
  50.             <param-value>  
  51.                 php|php3|php5|phtml|asp|aspx|ascx|jsp|cfm|cfc|pl|bat|exe|dll|reg|cgi  
  52.             <!--</span-->param-value>  
  53.         <!--</span-->init-param>  
  54.         <init-param>  
  55.             <param-name>AllowedExtensionsImage<!--</span-->param-name>  
  56.             <param-value>jpg|gif|jpeg|png|bmp<!--</span-->param-value>  
  57.         <!--</span-->init-param>  
  58.         <init-param>  
  59.             <param-name>DeniedExtensionsImage<!--</span-->param-name>  
  60.             <param-value><!--</span-->param-value>  
  61.         <!--</span-->init-param>  
  62.         <init-param>  
  63.             <param-name>AllowedExtensionsFlash<!--</span-->param-name>  
  64.             <param-value>swf|fla<!--</span-->param-value>  
  65.         <!--</span-->init-param>  
  66.         <init-param>  
  67.             <param-name>DeniedExtensionsFlash<!--</span-->param-name>  
  68.             <param-value><!--</span-->param-value>  
  69.         <!--</span-->init-param>  
  70.         <load-on-startup>1<!--</span-->load-on-startup>  
  71.     <!--</span-->servlet>  
  72.     <servlet-mapping>  
  73.         <servlet-name>Connector<!--</span-->servlet-name>  
  74.         <url-pattern>  
  75.             /editor/filemanager/browser/default/connectors/jsp/connector  
  76.         <!--</span-->url-pattern>  
  77.     <!--</span-->servlet-mapping>  
  78.     <servlet-mapping>  
  79.         <servlet-name>SimpleUploader<!--</span-->servlet-name>  
  80.         <url-pattern>  
  81.             /editor/filemanager/upload/simpleuploader  
  82.         <!--</span-->url-pattern>  
  83.     <!--</span-->servlet-mapping>  
  84. <!--</span-->web-app>  

注:web.xml中已l加入了一些常用配|的说明?/span>

  • 新徏input.jsp文gQ内容如下:(注意内容中的 testfckq个id)


Q上面不能直接帖HTML的代码,所以只能帖一个图片上来,要是有知道如何帖HTML代码的朋友,请告诉我一下,谢谢Q?br />

说明Q在JSP中集成FCKeditor<!--[endif]-->JavaScript集成Q?/p>

如上面内ҎC,通过新徏一?/span>FCKeditor对象Q然后调用该对象的设|方法来讄FCKeditor的各个属性,最后调?span new="" courier="" color="" black="">FCKeditor?span new="" courier="" color="" black="">ReplaceTextarea()替换HTML面中的<textarea>标签。另?span new="" courier="" color="" black="">FCKeditor也可以调用它?span new="" courier="" color="" black="">create()Ҏ来直接在JSP嵌入FCKeditor~辑器?/p>

注:注意上面?/span>oFCKeditor.BasePath = "";用这U方?span new="" courier="" color="" black="">FCKeditor会去查找它的editor目录下的fckeditor.html文gQ由于我是直接将editor文gҎ贝到WebContent目录下,所以将它的BasePath讄?span new="" courier="" color="" black="">””Q如果您?span new="" courier="" color="" black="">editor拯到其它目录,误|相应的BasePath属性?span new="" courier="" color="" black="">FCKeditor默认是将其放?span new="" courier="" color="" black="">fckeditor目录

Q?Q?lt;!--[endif]-->使用自定义标{?/span>该方法一定要完成W?/span>步:解压 FCKeditor.java-2.3.zip 包,其中的 "src 下的 FCKeditor.tld 文g到项目的 WebContent"WEB-INF 目录

首先?/span>JSP中加?span new="" courier="" color="" black="">FCKeditor标签Q?/p>

<%@ taglib uri=”/WEB-INF/FCKeditor.tld” prefix=”fck” %>

       JSP面中加入如下代码,集成FCKeditor~辑器:
js 代码
  1.     id="testfck" <!--—注意这?nbsp;-->  
  2.     basePath="/FCKeditor/"   
  3.     height="60%"  
  4.     skinPath="/FCKeditor/editor/skins/default/"   
  5.     toolbarSet="Default"  
  6.     imageBrowserURL="/FCKeditor/editor/filemanager/browser/default/browser.html?Type=Image&Connector=connectors/jsp/connector"  
  7.     linkBrowserURL="/FCKeditor/editor/filemanager/browser/default/browser.html?Connector=connectors/jsp/connector"  
  8.     flashBrowserURL="/FCKeditor/editor/filemanager/browser/default/browser.html?Type=Flash&Connector=connectors/jsp/connector"  
  9.     imageUploadURL="/FCKeditor/editor/filemanager/upload/simpleuploader?Type=Image"  
  10.     linkUploadURL="/FCKeditor/editor/filemanager/upload/simpleuploader?Type=File"  
  11.     flashUploadURL="/FCKeditor/editor/filemanager/upload/simpleuploader?Type=Flash">  
  12.   

(10) 新徏文gQ这个文件比较简单,只是单的昄?/span>在线~辑器传递过来的内容Q如下:

<%=request.getParameter("testfck")%>

注意q里?span new="" courier="" color="" black="">getParameter(“testfck”)
Q这?span new="" courier="" color="" black="">”testfck”
是?span new="" courier="" color="" black="">input.jsp中设|的id?br />

Q.FCKeditorc说?/span>

下面是用来在面中徏立编辑器的FCKEDITOR cȝ说明

(1) 构造器:

FCKeditor(instanceName[,width,height,toolbarSet,value])


  • instanceName:~辑器的唯一名称(相当于ID)

  • WIDTH:宽度

  • HEIGHT:高度

  • toolbarSet:工具条集合的名称

  • value:~辑器初始化内容


(2) 属?

  • instanceName:~辑器实例名

  • width:宽度,默认gؓ100%

  • height:高度,默认值是200

  • ToolbarSet:工具集名U?参考FCKCONFIG.JS,默认值是Default

  • value:初始化编辑器的HTML 代码,默认gؓI?/p>

  • BasePath:~辑器的\?默认?Fckeditor/文g?注意,量不要使用相对路径.最用相对于站点根\径的表示Ҏ,要以/l尾

  • CheckBrowser:是否在显C编辑器前检查浏览器兼容?默认为true

  • DisplayErrors:是否昄提示错误,默ؓtrue

(3) 集合:

Config[Key]=value

q个集合用于更改配置中某一的??/span>

oFckeditor.Config["DefaultLanguage"]="ptbr"

(4) Ҏ:

Create()

建立q输出编辑器

RepaceTextArea(TextAreaName)

用编辑器来替换对应的文本?/span>

5.如何配置FCKEDITOR

FCKEDITOR 提供了一套用于定制其外观,Ҏ及行ؓ的设|集.主配|文件名为Fckconfig.js你既可以~辑主配|文?也可以自己定义单独的配置文g.配置文g使用JAVASCRIPT 语法.修改?在徏立编辑器?可以使用以下语法:

varoFCKeditor=newFCKeditor('FCKeditor1')

oFCKeditor.Config['CustomConfigurationsPath']='/myconfig.js'

oFCKeditor.Create()

提醒:当你修改配置?hI浏览器~存以查看效?/span>

配置选项:

AutoDetectLanguage=true/false 自动语a

BaseHref=""相对链接的基地址

ContentLangDirection="ltr/rtl"默认文字方向

ContextMenu=字符串数l?右键菜单的内?/p>

CustomConfigurationsPath=""自定义配|文件\径和名称

Debug=true/false 是否开启调试功?q样,当调用FCKDebug.Output()?会在调试H中输出内容

DefaultLanguage=""~省语言

EditorAreaCss=""~辑区的样式表文?/p>

EnableSourceXHTML=true/false 为TRUE ?当由可视化界面切换到代码|,把HTML 处理成XHTML

EnableXHTML=true/false 是否允许使用XHTML 取代HTML

FillEmptyBlocks=true/false 使用q个功能,可以空的块U元素用I格来替?/p>

FontColors=""讄昄颜色拑֏器时文字颜色列表

FontFormats=""讄昄在文字格式列表中的命?/p>

FontNames=""字体列表中的字体?/p>

FontSizes=""字体大小中的字号列表

ForcePasteAsPlainText=true/false 强制_脓为纯文本

ForceSimpleAmpersand=true/false

FCKEditor.bmp
 描述:  
 文g大小:  90 KB
 看过?  文g被下载或查看 2242 ?/td>

FCKEditor.bmp
下蝲
SRC.bmp
 描述:  
 文g大小:  286 KB
 看过?  文g被下载或查看 2163 ?/td>

SRC.bmp
下蝲
NewApp.bmp
 描述:  
 文g大小:  759 KB
 看过?  文g被下载或查看 2147 ?/td>

NewApp.bmp
下蝲


飞鸟 2007-11-04 10:41 发表评论
]]>
javascript对下拉列表框(select)的操?/title><link>http://www.tkk7.com/yczz/articles/155489.html</link><dc:creator>飞鸟</dc:creator><author>飞鸟</author><pubDate>Wed, 24 Oct 2007 02:37:00 GMT</pubDate><guid>http://www.tkk7.com/yczz/articles/155489.html</guid><wfw:comment>http://www.tkk7.com/yczz/comments/155489.html</wfw:comment><comments>http://www.tkk7.com/yczz/articles/155489.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/yczz/comments/commentRss/155489.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/yczz/services/trackbacks/155489.html</trackback:ping><description><![CDATA[q篇文章Q主要是关于javascript和select相关的最基本ҎQ以供不熟悉javascript的h参考。常见的情况是,提出表单l构的hQ?不仅仅需要ؓE序设计逻辑Q创建数据结构,q需要设计表单的样式Q以及熟悉javascriptQ某些公司可能会要求您精通photoshopQ最初的?候,我们都是全才?<br /> <br /> 下面是我们例子的基础Q这不是一个标准的表单?<br /> <br /> 下面是我们例子的基础Q这不是一个标准的表单?<br /> <br /> <font color="#999999"><form id="f"> <br /> <select size="1" name="s"> <br /> <option value="aspxuexi.com">asp学习|?lt;/option> <br /> <option value="baidu.com">癑ֺ</option> <br /> </select> <br /> </form> <br /> </font><br /> --------------------------------------------------------------------------- <br /> <br /> <script type="text/javascript"> <br /> <!-- <br /> var f = document.getElementById("f"); <br /> <br /> //获得select列表Ҏ?<br /> document.write(f.s.options.length); <br /> document.write(f.s.length); <br /> <br /> //当前选中的下标(? 开?Q有两种ҎQ?<br /> //如果选择了多,则返回第一个选中的下标 <br /> document.write(f.s.options.selectedIndex); <br /> document.write(f.s.selectedIndex); <br /> <br /> //某一Ҏ否被选中 <br /> document.write(f.s.options[0].selected); <br /> <br /> //获得某一的值和文字 <br /> document.write(f.s.options[0].value); <br /> document.write(f.s.options[1].text); <br /> <br /> //删除某一?<br /> f.s.options[1] = null; <br /> <br /> //q加一?<br /> f.s.options[f.s.options.length] = new Option("q加的text", "q加的value"); <br /> <br /> //更改一?<br /> f.s.options[1] = new Option("更改的text", "更改的value"); <br /> //也可以直接设|该的 text ?value <br /> //--> <br /> </script> <br /> <br /> <br /> //全选列表中的项 <br /> function SelectAllOption(list) <br /> { <br /> for (var i=0; i<list.options.length; i++) <br /> { <br /> list.options[i].selected = true; <br /> } <br /> } <br /> <br /> <br /> //反选列表中的项 by aspxuexi.com asp学习|?<br /> function DeSelectOptions(list) <br /> { <br /> for (var i=0; i<list.options.length; i++) <br /> { <br /> list.options[i].selected = !list.options[i].selected; <br /> } <br /> } <br /> <br /> <br /> //q回列表中选择Ҏ?<br /> function GetSelectedOptionsCnt(list) <br /> { <br /> var cnt = 0; <br /> var i = 0; <br /> for (i=0; i<list.options.length; i++) <br /> { <br /> if (list.options[i].selected) <br /> { <br /> cnt++; <br /> } <br /> } <br /> <br /> return cnt; <br /> } <br /> <br /> <br /> //清空列表 <br /> function ClearList(list) <br /> { <br /> while (list.options.length > 0) <br /> { <br /> list.options[0] = null; <br /> } <br /> } <br /> <br /> <br /> //删除列表选中?<br /> //q回删除的数量 <br /> function DelSelectedOptions(list) <br /> { <br /> var i = 0; <br /> var deletedCnt = 0; <br /> while (i < list.options.length) <br /> { <br /> if (list.options[i].selected) <br /> { <br /> list.options[i] = null; <br /> deletedCnt++; <br /> } <br /> else <br /> { <br /> i++; <br /> } <br /> } <br /> <br /> return deletedCnt; <br /> } <br /> //此函数查扄应的Ҏ否存?<br /> //repeatCheck是否q行重复性检?<br /> //若ؓ"v"Q按D行重复值检?<br /> //若ؓ"t"Q按文字q行重复值检?<br /> //若ؓ"vt"Q按值和文字q行重复值检?<br /> //其它|不进行重复性检查,q回false <br /> function OptionExists(list, optText, optValue, repeatCheck) <br /> { <br /> var i = 0; <br /> var find = false; <br /> <br /> if (repeatCheck == "v") <br /> { <br /> //按D行重复值检?<br /> for (i=0; i<list.options.length; i++) <br /> { <br /> if (list.options[i].value == optValue) <br /> { <br /> find = true; <br /> break; <br /> } <br /> } <br /> } <br /> else if (repeatCheck == "t") <br /> { <br /> //按文字进行重复检?<br /> for (i=0; i<list.options.length; i++) <br /> { <br /> if (list.options[i].text == optText) <br /> { <br /> find = true; <br /> break; <br /> } <br /> } <br /> } <br /> else if (repeatCheck == "vt") <br /> { <br /> //按值和文字q行重复?<br /> for (i=0; i<list.options.length; i++) <br /> { <br /> if ((list.options[i].value == optValue) && (list.options[i].text == optText)) <br /> { <br /> find = true; <br /> break; <br /> } <br /> } <br /> } <br /> <br /> return find; <br /> } <br /> <br /> <br /> //向列表中q加一个项 <br /> //list 是要q加的列?<br /> //optText ?optValue 分别表示的文字和?<br /> //repeatCheck 是否q行重复性检查,参见 OptionExists <br /> //d成功q回 trueQ失败返?false <br /> function AppendOption(list, optText, optValue, repeatCheck) <br /> { <br /> if (!OptionExists(list, optText, optValue, repeatCheck)) <br /> { <br /> list.options[list.options.length] = new Option(optText, optValue); <br /> return true; <br /> } <br /> else <br /> { <br /> return false; <br /> } <br /> } <br /> <br /> <br /> //插入?<br /> //index 插入位置Q当插入位置 >= 列表现有Ҏ量时Q其作用相当于不q行重复查的q加?<br /> //optText ?optValue 分别表示的文字和?<br /> function InsertOption(list, index, optText, optValue) <br /> { <br /> var i = 0; <br /> for (i=list.options.length; i>index; i--) <br /> { <br /> list.options[i] = new Option(list.options[i-1].text, list.options[i-1].value); <br /> } <br /> <br /> list.options[index] = new Option(optText, optValue); <br /> } <br /> //一个列表中的项导到另一个列表中 <br /> //repeatCheck是否q行重复性检查,参见OptionExists <br /> //deleteSource导到目标后Q是否删除源列表中的?<br /> //q回影响的项数量 <br /> function ListToList(sList, dList, repeatCheck, deleteSource) <br /> { <br /> //所影响的行?<br /> var lines = 0; <br /> var i = 0; <br /> while (i<sList.options.length) <br /> { <br /> if (sList.options[i].selected && AppendOption(dList, sList.options[i].text, sList.options[i].value, repeatCheck)) <br /> { <br /> //d成功 <br /> lines++; <br /> if (deleteSource) <br /> { <br /> //删除源列表中的项 <br /> sList.options[i] = null; <br /> } <br /> else <br /> { <br /> i++; <br /> } <br /> } <br /> else <br /> { <br /> i++; <br /> } <br /> } <br /> <br /> return lines; <br /> } <br /> <br /> <br /> //列表中选中上U?<br /> function MoveSelectedOptionsUp(list) <br /> { <br /> var i = 0; <br /> var value = ""; <br /> var text = ""; <br /> for (i=0; i<(list.options.length-1); i++) <br /> { <br /> if (!list.options[i].selected && list.options[i+1].selected) <br /> { <br /> value = list.options[i].value; <br /> text = list.options[i].text; <br /> list.options[i] = new Option(list.options[i+1].text, list.options[i+1].value); <br /> list.options[i].selected = true; <br /> list.options[i+1] = new Option(text, value); <br /> } <br /> } <br /> } <br /> <br /> <br /> //列表中选中下U?<br /> function MoveSelectedOptionsDown(list) <br /> { <br /> var i = 0; <br /> var value = ""; <br /> var text = ""; <br /> for (i=list.options.length-1; i>0; i--) <br /> { <br /> <br /> //www.aspxuexi.com <br /> if (!list.options[i].selected && list.options[i-1].selected) <br /> { <br /> value = list.options[i].value; <br /> text = list.options[i].text; <br /> list.options[i] = new Option(list.options[i-1].text, list.options[i-1].value); <br /> list.options[i].selected = true; <br /> list.options[i-1] = new Option(text, value); <br /> } <br /> } <br /> } <br /> <br />   <img src ="http://www.tkk7.com/yczz/aggbug/155489.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/yczz/" target="_blank">飞鸟</a> 2007-10-24 10:37 <a href="http://www.tkk7.com/yczz/articles/155489.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HTML中事件触发列表与解说http://www.tkk7.com/yczz/articles/144817.html飞鸟飞鸟Thu, 13 Sep 2007 04:58:00 GMThttp://www.tkk7.com/yczz/articles/144817.htmlhttp://www.tkk7.com/yczz/comments/144817.htmlhttp://www.tkk7.com/yczz/articles/144817.html#Feedback0http://www.tkk7.com/yczz/comments/commentRss/144817.htmlhttp://www.tkk7.com/yczz/services/trackbacks/144817.html
一般事?/strong>
事g 览器支?/font> 描述
onClick HTML: 2 | 3 | 3.2 | 4
Browser: IE3 | N2 | O3
鼠标点击事gQ多用在某个对象控制的范围内的鼠标点?/td>
onDblClick HTML: 2 | 3 | 3.2 | 4
Browser: IE4 | N4 | O
鼠标双击事g
onMouseDown HTML: 2 | 3 | 3.2 | 4
Browser: IE4 | N4 | O
鼠标上的按钮被按下了
onMouseUp HTML: 2 | 3 | 3.2 | 4
Browser: IE4 | N4 | O
鼠标按下后,村ּ时激发的事g
onMouseOver HTML: 2 | 3 | 3.2 | 4
Browser: IE3 | N2 | O3
当鼠标移动到某对象范围的上方时触发的事g
onMouseMove HTML: 2 | 3 | 3.2 | 4
Browser: IE4 | N4 | O
鼠标Ud时触发的事g
onMouseOut HTML: 2 | 3 | 3.2 | 4
Browser: IE4 | N3 | O3
当鼠标离开某对象范围时触发的事?/td>
onKeyPress HTML: 2 | 3 | 3.2 | 4
Browser: IE4 | N4 | O
当键盘上的某个键被按下ƈ且释放时触发的事?[注意:面内必L被聚焦的对象]
onKeyDown HTML: 2 | 3 | 3.2 | 4
Browser: IE4 | N4 | O
当键盘上某个按键被按下时触发的事件[注意:面内必L被聚焦的对象]
onKeyUp HTML: 2 | 3 | 3.2 | 4
Browser: IE4 | N4 | O
当键盘上某个按键被按攑ּ时触发的事g[注意:面内必L被聚焦的对象]
面相关事g
事g 览器支?/font> 描述
onAbort HTML: 2 | 3 | 3.2 | 4
Browser: IE4 | N3 | O
囄在下载时被用户中?/td>
onBeforeUnload HTML: 2 | 3 | 3.2 | 4
Browser: IE4 | N | O
当前面的内容将要被改变时触发的事g
onError HTML: 2 | 3 | 3.2 | 4
Browser: IE4 | N3 | O
捕抓当前面因ؓ某种原因而出现的错误Q如脚本错误与外部数据引用的错误
onLoad HTML: 2 | 3 | 3.2 | 4
Browser: IE3 | N2 | O3
面内空完成传送到览器时触发的事Ӟ包括外部文g引入完成
onMove HTML: 2 | 3 | 3.2 | 4
Browser: IE | N4 | O
览器的H口被移动时触发的事?/td>
onResize HTML: 2 | 3 | 3.2 | 4
Browser: IE4 | N4 | O
当浏览器的窗口大被改变时触发的事g
onScroll HTML: 2 | 3 | 3.2 | 4
Browser: IE4 | N | O
览器的滚动条位|发生变化时触发的事?/td>
onStop HTML: 2 | 3 | 3.2 | 4
Browser: IE5 | N | O
览器的停止按钮被按下时触发的事件或者正在下载的文g被中?/td>
onUnload HTML: 2 | 3 | 3.2 | 4
Browser: IE3 | N2 | O3
当前面被改变时触发的事g
表单相关事g
事g 览器支?/font> 描述
onBlur HTML: 2 | 3 | 3.2 | 4
Browser: IE3 | N2 | O3
当前元素失去焦点时触发的事g [鼠标与键盘的触发均可]
onChange HTML: 2 | 3 | 3.2 | 4
Browser: IE3 | N2 | O3
当前元素失去焦点q且元素的内容发生改变而触发的事g [鼠标与键盘的触发均可]
onFocus HTML: 2 | 3 | 3.2 | 4
Browser: IE3 | N2 | O3
当某个元素获得焦Ҏ触发的事?/td>
onReset HTML: 2 | 3 | 3.2 | 4
Browser: IE4 | N3 | O3
当表单中RESET的属性被Ȁ发时触发的事?/td>
onSubmit HTML: 2 | 3 | 3.2 | 4
Browser: IE3 | N2 | O3
一个表单被递交时触发的事g
滚动字幕事g
事g 览器支?/font> 描述
onBounce HTML: 2 | 3 | 3.2 | 4
Browser: IE4 | N | O
在Marquee内的内容Ud至Marquee昄范围之外时触发的事g
onFinish HTML: 2 | 3 | 3.2 | 4
Browser: IE4 | N | O
当Marquee元素完成需要显C的内容后触发的事g
onStart HTML: 2 | 3 | 3.2 | 4
Browser: IE4 | N | O
当Marquee元素开始显C内Ҏ触发的事?/td>
~辑事g
事g 览器支?/font> 描述
onBeforeCopy HTML: 2 | 3 | 3.2 | 4
Browser: IE5 | N | O
当页面当前的被选择内容要复制到浏览者系l的剪脓板前触发的事?/td>
onBeforeCut HTML: 2 | 3 | 3.2 | 4
Browser: IE5 | N | O
当页面中的一部分或者全部的内容被Uȝ当前面[剪脓]q移动到览者的pȝ剪脓板时触发的事?/td>
onBeforeEditFocus HTML: 2 | 3 | 3.2 | 4
Browser: IE5 | N | O
当前元素要q入~辑状?/td>
onBeforePaste HTML: 2 | 3 | 3.2 | 4
Browser: IE5 | N | O
内容要从浏览者的pȝ剪脓板传送[_脓]到页面中时触发的事g
onBeforeUpdate HTML: 2 | 3 | 3.2 | 4
Browser: IE5 | N | O
当浏览者粘贴系l剪贴板中的内容旉知目标对象
onContextMenu HTML: 2 | 3 | 3.2 | 4
Browser: IE5 | N | O
当浏览者按下鼠标右键出现菜单时或者通过键盘的按键触发页面菜单时触发的事?[试试在页面中?lt;body>中加入onContentMenu="return false"可止使用鼠标右键了]
onCopy HTML: 2 | 3 | 3.2 | 4
Browser: IE5 | N | O
当页面当前的被选择内容被复制后触发的事?/td>
onCut HTML: 2 | 3 | 3.2 | 4
Browser: IE5 | N | O
当页面当前的被选择内容被剪切时触发的事?/td>
onDrag HTML: 2 | 3 | 3.2 | 4
Browser: IE5 | N | O
当某个对象被拖动时触发的事g [zd事g]
onDragDrop HTML: 2 | 3 | 3.2 | 4
Browser: IE | N4 | O
一个外部对象被鼠标拖进当前H口或者
onDragEnd HTML: 2 | 3 | 3.2 | 4
Browser: IE5 | N | O
当鼠标拖动结束时触发的事Ӟ即鼠标的按钮被释放了
onDragEnter HTML: 2 | 3 | 3.2 | 4
Browser: IE5 | N | O
当对象被鼠标拖动的对象进入其容器范围内时触发的事?/td>
onDragLeave HTML: 2 | 3 | 3.2 | 4
Browser: IE5 | N | O
当对象被鼠标拖动的对象离开其容器范围内时触发的事g
onDragOver HTML: 2 | 3 | 3.2 | 4
Browser: IE5 | N | O
当某被拖动的对象在另一对象容器范围内拖动时触发的事?[zd事g]
onDragStart HTML: 2 | 3 | 3.2 | 4
Browser: IE4 | N | O
当某对象被拖动时触发的事g
onDrop HTML: 2 | 3 | 3.2 | 4
Browser: IE5 | N | O
在一个拖动过E中Q释N标键时触发的事g
onLoseCapture HTML: 2 | 3 | 3.2 | 4
Browser: IE5 | N | O
当元素失去鼠标移动所形成的选择焦点时触发的事g
onPaste HTML: 2 | 3 | 3.2 | 4
Browser: IE5 | N | O
当内容被_脓时触发的事g
onSelect HTML: 2 | 3 | 3.2 | 4
Browser: IE4 | N | O
当文本内容被选择时的事g
onSelectStart HTML: 2 | 3 | 3.2 | 4
Browser: IE4 | N | O
当文本内定w择开始发生时触发的事?/td>
数据l定
事g 览器支?/font> 描述
onAfterUpdate HTML: 2 | 3 | 3.2 | 4
Browser: IE4 | N | O
当数据完成由数据源到对象的传送时触发的事?/td>
onCellChange HTML: 2 | 3 | 3.2 | 4
Browser: IE5 | N | O
当数据来源发生变化时
onDataAvailable HTML: 2 | 3 | 3.2 | 4
Browser: IE4 | N | O
当数据接收完成时触发事g
onDatasetChanged HTML: 2 | 3 | 3.2 | 4
Browser: IE4 | N | O
数据在数据源发生变化时触发的事g
onDatasetComplete HTML: 2 | 3 | 3.2 | 4
Browser: IE4 | N | O
当来子数据源的全部有效数据读取完毕时触发的事?/td>
onErrorUpdate HTML: 2 | 3 | 3.2 | 4
Browser: IE4 | N | O
当用onBeforeUpdate事g触发取消了数据传送时Q代替onAfterUpdate事g
onRowEnter HTML: 2 | 3 | 3.2 | 4
Browser: IE5 | N | O
当前数据源的数据发生变化q且有新的有效数据时触发的事?/td>
onRowExit HTML: 2 | 3 | 3.2 | 4
Browser: IE5 | N | O
当前数据源的数据要发生变化时触发的事g
onRowsDelete HTML: 2 | 3 | 3.2 | 4
Browser: IE5 | N | O
当前数据记录被删除时触发的事g
onRowsInserted HTML: 2 | 3 | 3.2 | 4
Browser: IE5 | N | O
当前数据源将要插入新数据记录时触发的事g
外部事g
事g 览器支?/font> 描述
onAfterPrint HTML: 2 | 3 | 3.2 | 4
Browser: IE5 | N | O
当文档被打印后触发的事g
onBeforePrint HTML: 2 | 3 | 3.2 | 4
Browser: IE5 | N | O
当文档即打印时触发的事?/td>
onFilterChange HTML: 2 | 3 | 3.2 | 4
Browser: IE4 | N | O
当某个对象的滤镜效果发生变化时触发的事g
onHelp HTML: 2 | 3 | 3.2 | 4
Browser: IE4 | N | O
当浏览者按下F1或者浏览器的帮助选择时触发的事g
onPropertyChange HTML: 2 | 3 | 3.2 | 4
Browser: IE5 | N | O
当对象的属性之一发生变化时触发的事g
onReadyStateChange HTML: 2 | 3 | 3.2 | 4
Browser: IE4 | N | O
当对象的初始化属性值发生变化时触发的事?/td>


飞鸟 2007-09-13 12:58 发表评论
]]>
DWR文档之开始?DWRhttp://www.tkk7.com/yczz/articles/138923.html飞鸟飞鸟Thu, 23 Aug 2007 12:21:00 GMThttp://www.tkk7.com/yczz/articles/138923.htmlhttp://www.tkk7.com/yczz/comments/138923.htmlhttp://www.tkk7.com/yczz/articles/138923.html#Feedback0http://www.tkk7.com/yczz/comments/commentRss/138923.htmlhttp://www.tkk7.com/yczz/services/trackbacks/138923.htmlDWR文档之开始?DWR

原文出处: http://www.javatang.com/archives/2006/10/20/254879.html
译: Jet Mah
声明: L持文章的完整性Q意{?/p>

开始?DWR

有两U方法来开?DWR 的学习,最单的做法?a target=_blank>下蝲官方提供?WAR 文g然后Ҏ深入研究。不q这U方式不能你感到将 DWR 整合C现有?web E序有多么的单,所以我们推荐你跟随下面三个步骤Q?/p>

1. 安装 DWR JAR ?/strong>
下蝲 dwr.jar 文gQ然后将它放?web E序?WEB-INF/lib 目录下面Q很可能在这个目录下已经有一?jar 文g了?/p>

2. ~辑 config 文g

下面的代码d?WEB-INF/web.xml 文g中,<servlet>需要放在另外的<servlet>之后Q?lt;servlet-mapping>也是如此?/p>

<servlet>
  <servlet-name>dwr-invoker</servlet-name>
  <display-name>DWR Servlet</display-name>
  <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
  <init-param>
     <param-name>debug</param-name>
     <param-value>true</param-value>
  </init-param>
</servlet>

<servlet-mapping>
  <servlet-name>dwr-invoker</servlet-name>
  <url-pattern>/dwr/*</url-pattern>
</servlet-mapping>

接下来创?dwr.xml 文gq将此放?web.xml 所在的 WEB-INF 目录下。文件中cM下面的内容:

<!DOCTYPE dwr PUBLIC
    ”-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN”
    ”http://www.getahead.ltd.uk/dwr/dwr10.dtd”>

<dwr>
  <allow>
    <create creator=”new” javascript=”JDate”>
      <param name=”class” value=”java.util.Date”/>
    </create>
    <create creator=”new” javascript=”Demo”>
      <param name=”class” value=”your.java.Bean”/>
    </create>
  </allow>
</dwr>

DWR 配置文g定义了由 DWR 创徏和被 Javascript q程使用的类。在上面的例子中我们在远E创Z2个类Qƈ且给Z?Javascript 中的cd?/p>

上面使用?new creator 使用了所有的 JavaBeans 必须含有的公有(publicQ无参(no-argsQ的构造函数。值得一提的是, DWR q有一些限Ӟ

  • 避免使用 JavaScript 保留字;以保留字命名的方法将自动被排除。大多数 JavaScript 的保留字同时也是 Java 的保留字Q因此无论如何你也不能用一个名?“try()” 的方法。但是最常用的一个词 “delete()”Q在 JavaScript 中有Ҏ的含义而在 Java 中没有?
  • 重蝲ҎQOverloaded methodsQ将会在调用的时候陷入未知的状况Q因此应该避免重载方法?

    3. 讉K下面的地址
    http://localhost:8080/[YOUR-WEBAPP]/dwr/

    你应该会看到一个页面,上面昄了刚才你在第二步所创徏的类。进入一个链接之后你会看到所有等待调用方法的列表。这些动态生的例子你也能通过 DWR 来实现?/p>

    亲自试和体会下吧?/p>

    怎样应用C?Web E序中?

    在侧Ҏ有很多例子演CZ怎样改变|页中的文本、更新列表、操作表单和动态修改表根{每一个例子都有详l的说明?/p>

    另外一个开始方法就是从面中查看源代码Q这些页面你刚刚览q:

  • q入 http://localhost:8080/[YOUR-WEBAPP]/dwr/ 然后点击你创建的c;
  • 查看源代码然后定位到你所感兴的Ҏ的代码行Q?
  • 这些文本粘贴到?Web E序的一?HTML ?JSP面中;
  • 包含下面?javascrip 文gQ?

    <script src=’/[YOUR-WEBAPP]/dwr/interface/[YOUR-SCRIPT].js’></script>
    <script src=’/[YOUR-WEBAPP]/dwr/engine.js’></script>

    你可以根据实际情况修?/[YOUR-WEBAPP]/ 部分?/p>

     



  • 飞鸟 2007-08-23 20:21 发表评论
    ]]>
    Javascript中最常用?5个经典技?/title><link>http://www.tkk7.com/yczz/articles/136557.html</link><dc:creator>飞鸟</dc:creator><author>飞鸟</author><pubDate>Tue, 14 Aug 2007 01:03:00 GMT</pubDate><guid>http://www.tkk7.com/yczz/articles/136557.html</guid><wfw:comment>http://www.tkk7.com/yczz/comments/136557.html</wfw:comment><comments>http://www.tkk7.com/yczz/articles/136557.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/yczz/comments/commentRss/136557.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/yczz/services/trackbacks/136557.html</trackback:ping><description><![CDATA[<p>1<span>. oncontextmenu="window.event.returnValue=false" 彻底屏蔽鼠标右?br><table border oncontextmenu=return(false)><td>no</table> 可用于Table</span></p> <span> <p>2. <body onselectstart="return false"> 取消选取、防止复?/p> <p>3. onpaste="return false" 不准_脓</p> <p>4. oncopy="return false;" oncut="return false;" 防止复制</p> <p>5. <link rel="Shortcut Icon" href="favicon.ico"> IE地址栏前换成自己的图?/p> <p>6. <link rel="Bookmark" href="favicon.ico"> 可以在收藏夹中显C出你的图标</p> <p><br>7. <input style="ime-mode:disabled"> 关闭输入?/p> <p><br>8. 永远都会带着框架<br><script language="JavaScript"><!--<br>if (window == top)top.location.href = "frames.htm"; //frames.htm为框架网?br>// --></script></p> <p><br>9. 防止被hframe<br><SCRIPT LANGUAGE=JAVASCRIPT><!-- <br>if (top.location != self.location)top.location=self.location;<br>// --></SCRIPT></p> <p><br>10. |页不能被另存?br><noscript><*** src="/*.html>";</***></noscript> </p> <p><br>11. <input type=button value="/查看|页源代?<br>onclick="window.location = "view-source:"+ "http://www.pconline.com.cn""><br>12.删除时确?br><a href=""javascript :if(confirm("实要删除吗?"))location="boos.asp?&areyou=删除&page=1"">删除</a> </p> <p><br>13. 取得控g的绝对位|?br>//Javascript<br><script language="Javascript"><br>function getIE(e){<br>var t=e.offsetTop;<br>var l=e.offsetLeft;<br>while(e=e.offsetParent){<br>t+=e.offsetTop;<br>l+=e.offsetLeft;<br>}<br>alert("top="+t+"/nleft="+l);<br>}<br></script><br>//VBScript<br><script language="VBScript"><!--<br>function getIE()<br>dim t,l,a,b<br>set a=document.all.img1<br>t=document.all.img1.offsetTop<br>l=document.all.img1.offsetLeft<br>while a.tagName<>"BODY"<br>set a = a.offsetParent<br>t=t+a.offsetTop<br>l=l+a.offsetLeft<br>wend<br>msgbox "top="&t&chr(13)&"left="&l,64,"得到控g的位|?<br>end function<br>--></script></p> <p><br>14. 光标是停在文本框文字的最?br><script language="javascript"><br>function cc()<br>{<br>var e = event.srcElement;<br>var r =e.createTextRange();<br>r.moveStart("character",e.value.length);<br>r.collapse(true);<br>r.select();<br>}<br></script><br><input type=text name=text1 value="123" onfocus="cc()"></p> <p><br>15. 判断上一늚来源<br>javascript :<br>document.referrer</p> <p><br>16. 最化、最大化、关闭窗?br><object id=hh1 classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11"> <br><param name="Command" value="Minimize"></object><br><object id=hh2 classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11"> <br><param name="Command" value="Maximize"></object><br><OBJECT id=hh3 classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11"><br><PARAM NAME="Command" value="/Close"></OBJECT><br><input type=button value="/最化 onclick=hh1.Click()><br><input type=button value="/blog/最大化 onclick=hh2.Click()><br><input type=button value=关闭 onclick=hh3.Click()><br>本例适用于IE</p> <p><br>17.屏蔽功能键Shift,Alt,Ctrl<br><script><br>function look(){ <br>if(event.shiftKey) <br>alert("止按Shift?"); //可以换成ALT CTRL<br>} <br>document.onkeydown=look; <br></script></p> <p><br>18. |页不会被缓?br><META HTTP-EQUIV="pragma" CONTENT="no-cache"><br><META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate"><br><META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT"><br>或?lt;META HTTP-EQUIV="expires" CONTENT="0"></p> <p><br>19.怎样让表单没有凹凸感Q?br><input type=text style="""border:1 solid #000000"> <br>?br><input type=text style="border-left:none; border-right:none; border-top:none; border-bottom: <br>1 solid #000000"></textarea></p> <p><br>20.<div><span>&<layer>的区别? <br><div>(division)用来定义大段的页面元素,会生{?<br><span>用来定义同一行内的元素,?lt;div>的唯一区别是不产生转行 <br><layer>是ns的标讎ͼie不支持,相当?lt;div></p> <p><br>21.让弹出窗口L在最上面:<br><body onblur="this.focus();"></p> <p><br>22.不要滚动? <br>让竖条没? <br><body style="overflow:scroll;overflow-y:hidden"> <br></body> <br>让横条没? <br><body style="overflow:scroll;overflow-x:hidden"> <br></body> <br>两个都去掉?更简单了 <br><body scroll="no"> <br></body> </p> <p><br>23.怎样L囄链接点击后,囄周围的虚U?<br><a href="#" onFocus="this.blur()"><img src="/logo.jpg" border=0></a></p> <p><br>24.电子邮g处理提交表单<br><form name="form1" method="post" action=<a href="mailto:****@***.com"><font color=#000080>mailto:****@***.com</font></a> <br>enctype="text/plain"> <br><input type=submit><br></form></p> <p><br>25.在打开的子H口h父窗口的代码里如何写Q?br>window.opener.location.reload()</p> <p><br>26.如何讑֮打开面的大?br><body onload="top.resizeTo(300,200);"><br>打开面的位|?lt;body onload="top.moveBy(300,200);"></p> <p><br>27.在页面中如何加入不是满铺的背景图?拉动面时背景图不动 <br><STYLE> <br>body <br>{background-image:url(/logo.gif); background-repeat:no-repeat; <br>background-position:center;background-attachment: fixed} <br></STYLE> </p> <p><br>28. 查一D字W串是否全由数字l成<br><script language="Javascript"><!--<br>function checkNum(str){return str.match(//D/)==null}<br>alert(checkNum("1232142141"))<br>alert(checkNum("123214214a1"))<br>// --></script></p> <p><br>29. 获得一个窗口的大小<br>document.body.clientWidth; document.body.clientHeight</p> <p><br>30. 怎么判断是否是字W?br>if (/[^/x00-/xff]/g.test(s)) alert("含有汉字");<br>else alert("全是字符");</p> <p><br>31.TEXTAREA自适应文字行数的多?br><textarea rows=1 name=s1 cols=27 onpropertychange<br>="this.style.posHeight=this.scrollHeight"><br></textarea></p> <p><br>32. 日期减去天数{于W二个日?br><script language=Javascript><br>function cc(dd,dadd)<br>{<br>//可以加上错误处理<br>var a = new Date(dd)<br>a = a.valueOf()<br>a = a - dadd * 24 * 60 * 60 * 1000<br>a = new Date(a)<br>alert(a.getFullYear() + "q? + (a.getMonth() + 1) + "? + a.getDate() + "?)<br>}<br>cc("12/23/2002",2)<br></script></p> <p><br>33. 选择了哪一个Radio<br><HTML><script language="vbscript"><br>function checkme()<br>for each ob in radio1<br>if ob.checked then <br>window.alert ob.value<br>next<br>end function<br></script><BODY><br><INPUT name="radio1" type="radio" value="/style" checked>Style<br><INPUT name="radio1" type="radio" value="/blog/barcode">Barcode<br><INPUT type="button" value="check" onclick="checkme()"><br></BODY></HTML></p> <p><br>34.脚本怸出错<br><SCRIPT LANGUAGE="JavaScript"> <br><!-- Hide <br>function killErrors() { <br>return true; <br>} <br>window.onerror = killErrors; <br>// --> <br></SCRIPT></p> <p><br>35.ENTER键可以让光标Ud下一个输入框<br><input onkeydown="if(event.keyCode==13)event.keyCode=9"></p> <p><br>36. 某个网站的链接速度Q?br>把如下代码加?lt;body>区域?<br><script language=Javascript><br>tim=1<br>setInterval("tim++",100)<br>b=1<br>var autourl=new Array()<br>autourl[1]=1000){this.resized=true;this.style.width=1000;}" align=absMiddle border=0><a target=_blank><font color=#000080>www.njcatv.net</font></a>"<br>autourl[2]="javacool.3322.net"<br>autourl[3]=1000){this.resized=true;this.style.width=1000;}" align=absMiddle border=0><a target=_blank><font color=#000080>www.sina.com.cn</font></a>"<br>autourl[4]="www.nuaa.edu.cn"<br>autourl[5]=1000){this.resized=true;this.style.width=1000;}" align=absMiddle border=0><a target=_blank><font color=#000080>www.cctv.com</font></a>"<br>function butt(){<br>***("<form name=autof>")<br>for(var i=1;i<autourl.length;i++)<br>***("<input type=text name=txt"+i+" size=10 value="/试?#8230;…> =?lt;input type=text <br>name=url"+i+" size=40> =?lt;input type=button value="/blog/GO <br>onclick=window.open(this.form.url"+i+".value)><br>")<br>***("<input type=submit value=h></form>")<br>}<br>butt()<br>function auto(url){<br>document.forms[0]["url"+b].value=url<br>if(tim>200)<br>{document.forms[0]["txt"+b].value="/链接时"}<br>else<br>{document.forms[0]["txt"+b].value="/blog/旉"+tim/10+"U?}<br>b++<br>}<br>function run(){for(var i=1;i<autourl.length;i++)***("<img src=http://"+autourl+"/"+Math.random()+" width=1 height=1 <br>onerror=auto("http://"+autourl+"")>")}<br>run()</script></p> <p><br>37. 各种样式的光?br>auto Q标准光?br>default Q标准箭?br>hand Q手形光?br>wait Q等待光?br>text QI形光?br>vertical-text Q水qI形光?br>no-drop Q不可拖动光?br>not-allowed Q无效光?br>help Q?帮助光标<br>all-scroll Q三角方向标<br>move Q移动标<br>crosshair Q十字标<br>e-resize<br>n-resize<br>nw-resize<br>w-resize<br>s-resize<br>se-resize<br>sw-resize</p> <p><br>38.面q入和退出的Ҏ<br>q入面<meta http-equiv="Page-Enter" content="revealTrans(duration=x, transition=y)"><br>推出面<meta http-equiv="Page-Exit" content="revealTrans(duration=x, transition=y)">  <br>q个是页面被载入和调出时的一些特效。duration表示Ҏ的持l时_以秒为单位。transition表示使用哪种ҎQ取gؓ1-23:<br>  0 矩Ş~小 <br>  1 矩Ş扩大 <br>  2 圆Ş~小<br>  3 圆Ş扩大 <br>  4 下到上刷?<br>  5 上到下刷?br>  6 左到叛_?<br>  7 叛_左刷?<br>  8 竖百叶窗<br>  9 横百叶窗 <br>  10 错位横百叶窗 <br>  11 错位竖百叶窗<br>  12 Ҏ?<br>  13 左右C间刷?<br>  14 中间到左叛_?br>  15 中间C?br>  16 上下C?<br>  17 右下到左?br>  18 右上到左?<br>  19 左上到右?<br>  20 左下到右?br>  21 横条 <br>  22 竖条 <br>  23 以上22U随机选择一U?/p> <p><br>39.在规定时间内跌{<br><META http-equiv=V="REFRESH" content="5;URL=http://www.51js.com"> </p> <p><br>40.|页是否被检?br><meta name="ROBOTS" content="属性?><br>  其中属性值有以下一?<br>  属性gؓ"all": 文g被索,且页上链接可被查询;<br>  属性gؓ"none": 文g不被索,而且不查询页上的链接Q?br>  属性gؓ"index": 文g被索;<br>  属性gؓ"follow": 查询上的链接;<br>  属性gؓ"noindex": 文g不检索,但可被查询链接;<br>  属性gؓ"nofollow": 文g不被索,但可查询上的链接?/p> <p><br>41、email地址的分?br>把如下代码加?lt;body>区域?br><a href="mailto:webmaster@sina.com">webmaster@sina.com</a></p> <p><br>42、流动边框效果的表格<br>把如下代码加?lt;body>区域?br><SCRIPT><br>l=Array(6,7,8,9,'a','b','b','c','d','e','f')<br>Nx=5;Ny=35<br>t="<table border=0 cellspacing=0 cellpadding=0 height="+((Nx+2)*16)+"><tr>"<br>for(x=Nx;x<Nx+Ny;x++)<br>t+="<td width=16 id=a_mo"+x+"> </td>"<br>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>"<br>for(x=2;x<=Nx;x++)<br>t+="<tr><td width=16 id=a_mo"+(Nx-x)+"> </td><td width=16 id=a_mo"+(Ny+Nx+x-1)+"> </td></tr>"<br>t+="<tr>"<br>for(x=Ny;x>0;x--)<br>t+="<td width=16 id=a_mo"+(x+Nx*2+Ny-1)+"> </td>"<br>***(t+"</tr></table>")<br>var N=Nx*2+Ny*2<br>function f1(y){<br>for(i=0;i<N;i++){<br>c=(i+y)%20;if(c>10)c=20-c<br>document.all["a_mo"+(i)].bgColor=""""#0000"+l[c]+l[c]+"'"}<br>y++<br>setTimeout('f1('+y+')','1')}<br>f1(1)<br></SCRIPT></p> <p><br>43、JavaScript主页弹出H口技?br>H口中间弹出<br><script><br>window.open("http://www.cctv.com","","width=400,height=240,top="+(screen.availHeight-240)/2+",left="+(screen.availWidth-400)/2);<br></script><br>============<br><html><br><head><br><script language="LiveScript"><br>function WinOpen() {<br>    msg=open("","DisplayWindow","toolbar=no,directories=no,menubar=no");<br>    msg.***("<HEAD><TITLE>?|?</TITLE></HEAD>");<br>    msg.***("<CENTER><H1>???</H1><h2>q??lt;B>JavaScript</B>所 开 ??H?</h2></CENTER>");<br>}<br></script><br></head><br><body><br><form><br><input type="button" name="Button1" value="Push me" onclick="WinOpen()"><br></form><br></body><br></html><br>==============<br>一、在下面的代码中Q你只要单击打开一个窗口,卛_链接到赛q网。而当你想关闭Ӟ只要单击一下即可关闭刚才打开的窗口?br>  代码如下Q?<br>  <SCRIPT language="JavaScript"> <br>  <Q?- <br>  function openclk() { <br>  another=open('1000){this.resized=true;this.style.width=1000;}" align=absMiddle border=0><a target=_blank><font color=#000080>http://www.ccidnet.com'</font></a>Q?NewWindow'); <br>  } <br>  function closeclk() { <br>  another.close(); <br>  } <br>  //--> <br>  </SCRIPT> <br>  <FORM> <br>  <INPUT TYPE="BUTTON" NAME="open" value="/打开一个窗? onClick="openclk()"> <br>  <BR> <br>  <INPUT TYPE="BUTTON" NAME="close" value="/blog/关闭q个H口" onClick="closeclk()"> <br>  </FORM> <br>  二、上面的代码也太静了Qؓ何不来点动感呢?如果能给面来个降落效果那该多好啊! <br>  代码如下Q?<br>  <script> <br>  function drop(n) { <br>  if(self.moveBy){ <br>  self.moveBy (0Q?900); <br>  for(i = n; i > 0; i--){ <br>  self.moveBy(0Q?); <br>  } <br>  for(j = 8; j > 0; j--){ <br>  self.moveBy(0Qj); <br>  self.moveBy(jQ?); <br>  self.moveBy(0Q?j); <br>  self.moveBy(-jQ?); <br>  } <br>  } <br>  } <br>  </script> <br>  <body onLoad="drop(300)"> <br>  三、讨厌很多网站L按照默认H口打开Q如果你能随心所Ʋ控制打开的窗口那该多好?<br>  代码如下: <br>  <SCRIPT LANGUAGE="JavaScript"> <br>  <Q?- Begin <br>  function popupPage(lQ?tQ?wQ?h) { <br>  var windowprops = "location=noQscrollbars=noQmenubars=noQtoolbars=noQresizable=yes" + <br>  "Qleft=" + l + "Qtop=" + t + "Qwidth=" + w + "Qheight=" + h; <br>  var URL = "http://www.80cn.com"; <br>  popup = window.open(URLQ?MenuPopup"Qwindowprops); <br>  } <br>  // End --> <br>  </script> <br>  <table> <br>  <tr> <br>  <td> <br>  <form name=popupform> <br>  <pre> <br>  打开面的参?lt;br> <br>  d左边的距? <input type=text name=left size=2 maxlength=4> pixels <br>  d双的距? <input type=text name=top size=2 maxlength=4> pixels <br>  H口的宽? <input type=text name=width size=2 maxlength=4> pixels <br>  H口的高? <input type=text name=height size=2 maxlength=4> pixels <br>  </pre> <br>  <center> <br>  <input type=button value="打开q个H口Q? onClick="popupPage(this.form.left.valueQ?this.form.top.valueQ?this.form.width.valueQ?br>this.form.height.value)"> <br>  </center> <br>  </form> <br>  </td> <br>  </tr> <br>  </table>你只要在相对应的对话框中输入一个数值即可,要打开的页面的H口控制得很好?</p> <p><br>44、页面的打开Ud<br>把如下代码加?lt;body>区域?br><SCRIPT LANGUAGE="JavaScript"><br><!-- Begin<br>for (t = 2; t > 0; t--) {<br>for (x = 20; x > 0; x--) {<br>for (y = 10; y > 0; y--) {<br>parent.moveBy(0,-x);<br>   }<br>}<br>for (x = 20; x > 0; x--) {<br>for (y = 10; y > 0; y--) {<br>parent.moveBy(0,x);<br>   }<br>}<br>for (x = 20; x > 0; x--) {<br>for (y = 10; y > 0; y--) {<br>parent.moveBy(x,0);<br>   }<br>}<br>for (x = 20; x > 0; x--) {<br>for (y = 10; y > 0; y--) {<br>parent.moveBy(-x,0);<br>     }<br>   } <br>}<br>//--><br>//   End --><br></script></p> <p><br>45、显CZ人客L机器的日期和旉<br><script language="LiveScript"><br><!-- Hiding<br>   today = new Date()<br>   ***("????是: ",today.getHours(),":",today.getMinutes())<br>   ***("<br>????为: ", today.getMonth()+1,"/",today.getDate(),"/",today.getYear());<br>// end hiding contents --><br></script></p> <p><br>46、自动的Z每次产生最後修改的日期了: <br><html><br><body><br>This is a simple HTML- page.<br><br><br>Last changes:<br>   <script language="LiveScript"><br>   <!--   hide script from old browsers<br>     ***(document.lastModified)<br>   // end hiding contents --><br>   </script><br></body><br></html></p> <p><br>47、不能ؓI和邮g地址的约束:<br><html><br><head><br><script language="JavaScript"><br><!-- Hide<br>function test1(form) {<br>   if (form.text1.value == "")<br>     alert("???????西, ????一 ?!")<br>   else { <br>    alert("?"+form.text1.value+"! ??????!");<br>   }<br>}<br>function test2(form) {<br>   if (form.text2.value == "" || <br>       form.text2.value.indexOf('@', 0) == -1) <br>         alert("q??????e-mail address! ????一 ?!");<br>   else alert("??????!");<br>}<br>// --><br></script><br></head><br><body><br><form name="first"><br>Enter your name:<br><br><input type="text" name="text1"><br><input type="button" name="button1" value="???? onClick="test1(this.form)"><br><P><br>Enter your e-mail address:<br><br><input type="text" name="text2"><br><input type="button" name="button2" value="???? onClick="test2(this.form)"><br></body></p> <p><br>48、跑马灯<br><html><br><head><br><script language="JavaScript"><br><!-- Hide<br>var scrtxt="怎麽?! 很酷?! 您也可以试试."+"Here goes your message the visitors to your <br>page will "+"look at for hours in pure fascination...";<br>var lentxt=scrtxt.length;<br>var width=100;<br>var pos=1-width;<br>function scroll() {<br>   pos++;<br>   var scroller="";<br>   if (pos==lentxt) {<br>     pos=1-width;<br>   }<br>   if (pos<0) {<br>     for (var i=1; i<=Math.abs(pos); i++) {<br>       scroller=scroller+" ";}<br>     scroller=scroller+scrtxt.substring(0,width-i+1);<br>   }<br>   else {<br>     scroller=scroller+scrtxt.substring(pos,width+pos);<br>   }<br>   window.status = scroller;<br>   setTimeout("scroll()",150);<br>   }<br>//--><br></script><br></head><br><body onLoad="scroll();return true;"><br>q里可显C您的网?!<br></body><br></html></p> <p><br>49、在|页中用按钮来控制前,后页和主늚昄?br><html><br><body><br><FORM NAME="buttonbar"><br>      <INPUT TYPE="button" VALUE="Back" onClick="history.back()"><br>      <INPUT TYPE="button" VALUE="JS- Home" onClick="location='script.html'"><br>      <INPUT TYPE="button" VALUE="Next" onCLick="history.forward()"><br></FORM><br></body><br></html><br>50、查看某|址的源代码<br>把如下代码加?lt;body>区域?br><SCRIPT><br>function add()<br>{<br>var ress=document.forms[0].luxiaoqing.value<br>window.location="view-source:"+ress;<br>}<br></SCRIPT><br>输入要查看源代码的URL地址:<br><FORM><input type="text" name="luxiaoqing" size=40 value="http://"></FORM><br><FORM><br><br><INPUT type="button" value="查看源代? onClick=add()><br></FORM></p> <p><br>51、title昄日期<br>把如下代码加?lt;body>区域?<br><script language="JavaScript1.2"><br><!--hide<br>var isnMonth = new<br>Array("1?,"2?,"3?,"4?,"5?,"6?,"7?,"8?,"9?,"10?,"11?,"12?);<br>var isnDay = new<br>Array("星期?,"星期一","星期?,"星期?,"星期?,"星期?,"星期?,"星期?);<br>today = new Date () ;<br>Year=today.getYear();<br>Date=today.getDate();<br>if (document.all)<br>document.title="今天? "+Year+"q?+isnMonth[today.getMonth()]+Date+"?+isnDay[today.getDay()]<br>//--hide--><br></script></p> <p><br>52、显C所有链?br>把如下代码加?lt;body>区域?br><script language="JavaScript1.2"><br><!--<br>function extractlinks(){<br>var links=document.all.tags("A")<br>var total=links.length<br>var win2=window.open("","","menubar,scrollbars,toolbar")<br>win2.***("<font size='2'>一共有"+total+"个连?lt;/font><br>")<br>for (i=0;i<total;i++){<br>win2.***("<font size='2'>"+links[i].outerHTML+"</font><br>")<br>}<br>}<br>//--><br></script><br><input type="button" onClick="extractlinks()" value="昄所有的q接"></p> <p><br>53、回车键换行<br>把如下代码加?lt;body>区域?br><script type="text/javascript">                <br>function handleEnter (field, event) {<br>   var keyCode = event.keyCode ? event.keyCode : event.which ?<br>event.which : event.charCode;<br>   if (keyCode == 13) {<br>    var i;<br>    for (i = 0; i < field.form.elements.length; i++)<br>     if (field == field.form.elements[i])<br>      break;<br>    i = (i + 1) % field.form.elements.length;<br>    field.form.elements[i].focus();<br>    return false;<br>   } <br>   else<br>   return true;<br>}      <br></script><br><form><br><input type="text" onkeypress="return handleEnter(this, event)"><br><br><input type="text" onkeypress="return handleEnter(this, event)"><br><br><textarea>回R换行</p> <p><br>54、确认后提交<br>把如下代码加?lt;body>区域?br><SCRIPT LANGUAGE="JavaScript"><br><!--<br>function msg(){<br>if (confirm("你确认要提交嘛!"))<br>document.lnman.submit()<br>}<br>//--><br></SCRIPT><br><form name="lnman" method="post" action=""><br>   <p><br>     <input type="text" name="textfield" value="认后提?><br>   </p><br>   <p><br>     <input type="button" name="Submit" value="提交" onclick="msg();"><br>   </p><br></form></p> <p><br>55、改变表格的内容<br>把如下代码加?lt;body>区域?br><script ***script><br>var arr=new Array()<br>arr[0]="一一一一一";<br>arr[1]="二二二二?;<br>arr[2]="三三三三?;<br></script><br><select onchange="zz.cells[this.selectedIndex].innerHTML=arr[this.selectedIndex]"><br>   <option value=a>改变W一?lt;/option><br>   <option value=a>改变W二?lt;/option><br>   <option value=a>改变W三?lt;/option><br></select><br><table id=zz border=1><br>   <tr height=20><br>     <td width=150>W一?lt;/td><br><td width=150>W二?lt;/td><br><td width=150>W三?lt;/td><br>   </tr><br></table></span></p> <img src ="http://www.tkk7.com/yczz/aggbug/136557.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/yczz/" target="_blank">飞鸟</a> 2007-08-14 09:03 <a href="http://www.tkk7.com/yczz/articles/136557.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解决AJAX中文q问题比较好的Ҏhttp://www.tkk7.com/yczz/articles/109866.html飞鸟飞鸟Wed, 11 Apr 2007 04:12:00 GMThttp://www.tkk7.com/yczz/articles/109866.htmlhttp://www.tkk7.com/yczz/comments/109866.htmlhttp://www.tkk7.com/yczz/articles/109866.html#Feedback0http://www.tkk7.com/yczz/comments/commentRss/109866.htmlhttp://www.tkk7.com/yczz/services/trackbacks/109866.html 写在前面Q?/strong>
         
          q段旉在深圳一家公司实习,公司规定要做2个课题来考验我们水^Q遇C个模块只有用AJAX实现才是最完美的,q让我我惌v最初接触AJAX时就是由于中文ؕ码问题让我放弃了使用q个技术,但是q次我没有放弃选择权,我不得不开启喜q癑ֺQ搜索着解决ҎQ但是用来网上所说的好几个方法都无法解决Q所以不得不自己思考一下解决ؕ码的Ҏ?br>       现在WEBpȝ基本上都要用到过滤流技术可是几乎所有的公司都是用GBK~码来过滤字W,但是AJAX是老外的技术他们用UTF-8~码Q怎么解决q个问题呢,我想到的昨天一个doublecd转换为金钱格式显C问题,如果在后台处理这个问题要p很多功夫Q但是放在前台用javascript处理很好,q样既不影响后台业务Q又实现了前台显C格式的要求。那么AJAX~码能不能在前台转换了,立刻L相关质料在下面列出?br> 
    URL~码Ҏ?U?br>escape() ,unescape()      encodeURI(),decodeURI()       encodeURIComponent(),decodeURIComponent() q几U编码所L作用各不相同

    escape() ҎQ?/strong>  

    采用ISO Latin字符集对指定的字W串q行~码。所有的I格W、标点符受特D字W以及其他非ASCII字符都将被{化成%xx格式的字W编码(xx{于该字W在字符集表里面的编码的16q制数字Q。比如,I格W对应的~码?20?

    不会被此Ҏ~码的字W: @ * / +

    encodeURI() ҎQ?/span>

    把URI字符串采用UTF-8~码格式转化成escape格式的字W串?

    不会被此Ҏ~码的字W:! @ # $& * ( ) = : / ; ? + '

    encodeURIComponent() ҎQ?/strong>

    把URI字符串采用UTF-8~码格式转化成escape格式的字W串。与encodeURI()相比Q这个方法将Ҏ多的字符q行~码Q比?/ {字W。所以如果字W串里面包含了URI的几个部分的话,不能用这个方法来q行~码Q否?/ 字符被编码之后URL显C错误?

    不会被此Ҏ~码的字W:! * ( ) '

    因此Q对于中文字W串来说Q如果不希望把字W串~码格式转化成UTF-8格式的(比如原页面和目标面的charset是一致的时候)Q只需要用escape。如果你的页面是GB2312或者其他的~码Q而接受参数的面是UTF-8~码的,p采用encodeURI或者encodeURIComponent?

    在后台JAVA处理函数Q?/strong>

    JS是:escape()函数    
    Java?   
    java.net.URLEncoder.encode()   
    java.net.URLDecoder.decode()  
    但是q个函数已经不推荐用了
    现在推荐使用
    java.net.URLEncoder.encode(str,encode);
    java.net.URLDecoder.decode(str,encode);

    q样构成了l一的编码格式下面D单的个例子:
    在服务器端:
    String encode=java.net.URLEncoder.encode("大家?,"utf-8");
    //encode=("%E5%A4%A7%E5%AE%B6%E5%A5%BD"
    String decode=java.net.URLDecoder.decode("%E5%A4%A7%E5%AE%B6%E5%A5%BD","utf-8");

    客户端解码Javascript:
    decodeURIComponent(xmlHttp.responseText);
    客户端传送时~码Q?br>encodeURIComponent("大家?)
    ?br>encodeURI("大家?)
    q样可以解决中文ؕ码编码问题了?br>
    下面方一个最单的AJAXl大家下载:
    点击下蝲


    飞鸟 2007-04-11 12:12 发表评论
    ]]>
    dwr?-一个例?l?http://www.tkk7.com/yczz/articles/46819.html飞鸟飞鸟Thu, 18 May 2006 06:59:00 GMThttp://www.tkk7.com/yczz/articles/46819.htmlhttp://www.tkk7.com/yczz/comments/46819.htmlhttp://www.tkk7.com/yczz/articles/46819.html#Feedback0http://www.tkk7.com/yczz/comments/commentRss/46819.htmlhttp://www.tkk7.com/yczz/services/trackbacks/46819.html阅读全文

    飞鸟 2006-05-18 14:59 发表评论
    ]]>
    dwr?-一个例?l二) http://www.tkk7.com/yczz/articles/46820.html飞鸟飞鸟Thu, 18 May 2006 06:59:00 GMThttp://www.tkk7.com/yczz/articles/46820.htmlhttp://www.tkk7.com/yczz/comments/46820.htmlhttp://www.tkk7.com/yczz/articles/46820.html#Feedback0http://www.tkk7.com/yczz/comments/commentRss/46820.htmlhttp://www.tkk7.com/yczz/services/trackbacks/46820.html阅读全文

    飞鸟 2006-05-18 14:59 发表评论
    ]]>
    dwr?-一个例?l合Struts) http://www.tkk7.com/yczz/articles/46795.html飞鸟飞鸟Thu, 18 May 2006 05:48:00 GMThttp://www.tkk7.com/yczz/articles/46795.htmlhttp://www.tkk7.com/yczz/comments/46795.htmlhttp://www.tkk7.com/yczz/articles/46795.html#Feedback0http://www.tkk7.com/yczz/comments/commentRss/46795.htmlhttp://www.tkk7.com/yczz/services/trackbacks/46795.html阅读全文

    飞鸟 2006-05-18 13:48 发表评论
    ]]>
    转帖DWR学习 http://www.tkk7.com/yczz/articles/46793.html飞鸟飞鸟Thu, 18 May 2006 05:47:00 GMThttp://www.tkk7.com/yczz/articles/46793.htmlhttp://www.tkk7.com/yczz/comments/46793.htmlhttp://www.tkk7.com/yczz/articles/46793.html#Feedback0http://www.tkk7.com/yczz/comments/commentRss/46793.htmlhttp://www.tkk7.com/yczz/services/trackbacks/46793.html http://getahead.ltd.uk/dwr/
    q段旉较闲,研究了一番dwr.发现dwr实现的AJAX有些地方实很是先进.比如动态生成javascript代码;隐藏的http协议;javascript于java代码交互的是javascript对象(或字W串){?
    以下是我临时译的一些东?本来惛_?发现dwr实在是简?随便写?英文居差,C?

    1、DWR: Easy AJAX for JAVA

    作ؓ一个java open source library,DWR可以帮助开发h员完成应用AJAX技术的webE序。它可以让浏览器上的javascriptҎ调用q行在web服务器上javaҎ?

    DWR主要׃部门l成。javascript与web服务器通信q更新web;q行在web服务器的Servlet处理hq把响应发回览器?

    DWR采用新颖的方法实CAJAX(本来也没有确切的定义)Q在java代码基础上动态的生成javascript代码。web开发者可以直接调用这些javascript代码Q然而真正的代码是运行在web服务器上的java code。出与安全考虑Q开发者必配|哪些java class暴露lDWR.(dwr.xml)

    q种?java到javascript)调用机制l用户一U感觉,好象常规的RPC机制Q或RMI or SOAP.但是它运行在web上,不需要Q何浏览器插g?

    DWR不认为浏览器和web服务器之间协议重要,把系l界面放在首位。最大挑战是java method call的同步特征与ajax异步Ҏ之间的矛盾。在异步模型里,l果只有在方法结束后才有效。DWR解决了这个问题,把回调函数当成参Cl方法,处理完成后,自动调用回调Ҏ?

    q个图表昄了,通过javascript事gQDWR能改变select的内容,当然q些内容由java代码q回?javascript函数Data.getOptions(populateList)由DWR动态生成,q个函数会调用java class DatacȝҎ。DWR处理如何q程调用Q包括{换所有的参数和返回的l果Qjavascript\javaQ。javaҎ执行完后Q执行回调方法populateList。在整个q程中我们就惛_用本地的Ҏ一栗?

    2、Getting Started

    废话说Q试试就ok了?
    web.xml

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">

    <web-app id="dwr">
    <servlet>
    <servlet-name>dwr-invoker</servlet-name>
    <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
    </servlet>
    <servlet-mapping>
    <servlet-name>dwr-invoker</servlet-name>
    <url-pattern>/dwr/*</url-pattern>
    </servlet-mapping>
    </web-app>

    dwr.xml 与web.xml同目?
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" "http://www.getahead.ltd.uk/dwr/dwr10.dtd">
    <dwr>
    <allow>
    <create creator="new" javascript="JDate">
    <param name="class" value="/oblog312/java.util.Date"/>
    </create>
    </allow>
    </dwr>

    index.html
    <html>
    <head>
    <title>DWR - Test Home</title>
    <script type='text/javascript' src="/oblog312/dwr/interface/JDate.js"></script>
    <script type='text/javascript' src="/oblog312/dwr/engine.js"></script>
    <script>
    function init(){
    JDate.getYear(load);
    }
    function load(data){
    alert(data+1900+'q?)
    }
    </script>
    </head>
    <body onload="init()">
    </body>
    </html>

    dwr.jar 下蝲放lib?

    完了Q什么,够了Q就q些。访问ok!
    3、Examples
    http://www.aboutmyhealth.org/ q不是Google Suggest?ok.
    4、源码浅?
    dwr的设计很象webwork2的设?隐藏http协议,扩展性,兼容性及强?

    通过研究uk.ltd.getahead.dwr.DWRServletq个servlet来研I下dwr到底是如何工作滴?

    java代码:  

    web.xml配置
    <servlet>
        <servlet-name>dwr-invoker</servlet-name>
        <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>dwr-invoker</servlet-name>
        <url-pattern>/dwr/*</url-pattern>
    </servlet-mapping>


    q样所有的/dwr/*所有请求都p个servlet来处理,它到底处理了些什么能。我们还以上面最单的例子来看?
    1?web服务器启动,DWRServlet init()Ҏ调用Qinit主要做了以下工作?
    讄日志U别、实例化DWR用到的单例类Q这些类在jvm中只有一个实例对象)、读去配|文Ӟ包括dwr.jar包中的dwr.xml,WEB-INF/dwr.xml. config*.xmlQ?
    2、请求处?
    DWRServlet.doGet, doPostҎ都调用processor.handle(req, resp)Ҏ处理。Processor对象在init()Ҏ中已l初始化了?
    java代码:  

    public void handle(HttpServletRequest req, HttpServletResponse resp)
            throws IOException
        {
            String pathinfo = req.getPathInfo();
            if(pathinfo == null || pathinfo.length() == 0 || pathinfo.equals("/"))
            {
                resp.sendRedirect(req.getContextPath() + req.getServletPath() + '/' + "index.html");
            } else
            if(pathinfo != null && pathinfo.equalsIgnoreCase("/index.html"))
            {
                doIndex(req, resp);
            } else
            if(pathinfo != null && pathinfo.startsWith("/test/"))
            {
                doTest(req, resp);
            } else
            if(pathinfo != null && pathinfo.equalsIgnoreCase("/engine.js"))
            {
                doFile(resp, "engine.js", "text/javascript");
            } else
            if(pathinfo != null && pathinfo.equalsIgnoreCase("/util.js"))
            {
                doFile(resp, "util.js", "text/javascript");
            } else
            if(pathinfo != null && pathinfo.equalsIgnoreCase("/deprecated.js"))
            {
                doFile(resp, "deprecated.js", "text/javascript");
            } else
            if(pathinfo != null && pathinfo.startsWith("/interface/"))
            {
                doInterface(req, resp);
            } else
            if(pathinfo != null && pathinfo.startsWith("/exec"))
            {
                doExec(req, resp);
            } else
            {
                log.warn("Page not found. In debug/test mode try viewing /[WEB-APP]/dwr/");
                resp.sendError(404);
            }
        }


    哦。这些恍然大悟。dwr/*处理的请求也p几种?
    Q?Qdwr/index.htmlQdwr/test/q种只能在debug模式下用,调试用?
    dwr/engine.jsQdwr/util.jsQdwr/deprecated.js当这个请求到达,从dwr.jar包中d文g,响应回去。(重复h有缓存)
    Q?Q当dwr/interface/q种h到来Q(例如我们在index.html中的 <script type='text/javascript' src="/oblog312/dwr/interface/JDate.js"></script>QDWR做一件伟大的事。把我们在WEB-INF/dwr.xml中的
    <create creator="new" javascript="JDate">
    <param name="class" value="/oblog312/java.util.Date"/>
    </create>
    java.util.Date转化为javascript函数?
    http://localhost:port/simpledwr/dwr/interface/JDate.js看看吧?
    l节也比较简单,通过java反射Q把Ҏ都写成javascript特定的方法。(我觉得这些{换可以放到缓存里Q下ơ调用没必要再生成一遍,不知道作者ؓ什么没q样做)?
    Q?Qdwr/exec
    javascript调用Ҏ时发送这U请求,可能是XMLHttpRequest或IFrame发送?
    当然Qjavascript调用的方法签名与java代码一_包括参数Q还有javascript的回调方法也传到了服务器端,在服务器端很Ҏ实现。回调方法的java的执行结?q回cM <script>callMethod(l果)<script>的javascript字符?在浏览器执行。哈Q一切就q么单,巧妙?

    dwr的设计构思很是y妙?
    W一、把javac{化ؓjavascriptcȝdwr自动完成Q只需单的配置?
    W二、应用v来极其简单。开发者不要该服务器代码就可以集成?
    W三、容易测试。和webwork一P隐藏的http协议?
    W四、及强扩展性。例如与spring集成Q只需修改一点代码?
    W五、性能。就我与jason,{简单比较,dwr性能可能是最好的?/td>

    飞鸟 2006-05-18 13:47 发表评论
    ]]>
    վ֩ģ壺 69˾ƷƵ| ޻ɫѹۿ| ҹҹˬ888Ƶ| AVƬ߹ۿ| aëƬƵۿ| ŷһվ7777| ѹۿ| ޾ƷƷþ99һ| ާžƷ| ߾ƷƵ| 2019Ļѿ| Ƶ߹ۿ| ƷϵƵ | avרߵӰ| Ļ޾ƷԴ| ۺɫ߹ۿ| ֻˬƵѿ| ѿAVëƬһ| ѾƷ߶| þþþþþƷѿSSS | ŷ޹Ʒ㽶| ޹Ʒ߹ۿ| ձվۿ| Ʒȫѹۿ| ѹۿƬëƬ| ڵƵվ| ŮƵ| 99ƷȫѹۿƵ| ߹ۿձaƵ| 91ƷѾþþþþ| 18ۿƵ| Ƶ߹ۿƵ| ĻƵһ| 1000ƬƵѿ| 999ƵƷѲŹۿ| 37pao˹Ƶ | ѻɫַ| ѹۿƵ| 츾ٸ߹ۿ| AVһһ| ݺۺۺɫ|