JavaScriptwindow(六)

简介: JavaScriptwindow(六)

window对象(Dom中的一个顶级对象)

window对象代表当前浏览器窗口。

使用window对象的属性、方法的时候可以省略window。

比如:

window.alert(‘hello');可以省略成alert(‘hello');

window.document可以直接写document

能不写window就不要写,这样可以减少js文件的字节数。

window对象的方法

window.alert(‘大家好!’);//弹出警告对话框

window.confirm(‘确定要删除吗?’);//确定、取消对话框,返回true或false;

window.navigate(url);//将网页重新导航到url,只支持IE、Opera11.6,建议使用window.location.href=‘url’;//支持大多数浏览器

window.setInterval(code,delay)//每隔一段时间执行指定的代码(类似于winForm中的Timer控件。)

第一个参数:指定的代码字符串

第二个参数:时间间隔(毫秒数)

var intervalId=setInterval(“alert(‘hello’);”,1000);

例:让文本框的数值自增


<html>


<head>


<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>


   <title></title>


  <meta charset="utf-8" />


   <script type="text/javascript">


       setInterval(function ()


       {undefined


           var num = txt.value;


           num = parseInt(num) + 1;


           txt.value = num;


       }, 1000)


   </script>


</head>


<body>


  <input type="text" id="txt" value="1"/>


</body>


</html>


window.clearInterval(intervalId);//停止计时器

clearInterval()取消setInterval的定时执行,相当于Timer中的Enabled=False。因为setInterval可以设定多个定时,所以clearInterval要指定清除那个定时器的标识,即setInterval的返回值。

注:<input type="button" value="滚动" οnclick="setInterval('scroll()', 500)" />


每调用一次setInterval都会产生一个新的定时器,并且旧的不会自动停止。所以看起来好像“越跑越快”!


clearInterval(setInterval('scroll()', 500)),错,不会停止原先的定时器,因为setInterval就产生一个新的定时器,刚产生就被clear


应用举例:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<html xmlns="http://www.w3.org/1999/xhtml" >


<head>


   <title>北京欢迎你</title>


   <script type="text/javascript">


       var timerId;


       function scroll() {undefined


           var title = document.title;


           var lastCh = title.charAt(title.length - 1); //容易错


           var leftStr = title.substring(0, title.length - 1);


           document.title = lastCh + leftStr;


       }


       //每调用一次setInterval都会产生一个新的定时器,并且旧的不会自动停止。所以看起来好像“越跑越快”!


   </script>


</head>


<body>


<input type="button" value="滚动" οnclick="if(timerId){clearInterval(timerId);}timerId=setInterval('scroll()', 500)" />


<input type="button" value="停止(错误写法)" οnclick="clearInterval(setInterval('scroll()', 500))" />


<input type="button" value="停止" οnclick="clearInterval(timerId)" />


</body>


</html>


例:利用定时器实现跑马灯效果.


<html>


<head>


   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />


   <title>0123456789</title>


   <meta charset="utf-8" />


   <script type="text/javascript">


       var dir = "left";


       setInterval(function () {undefined


           var title = document.title;


           var first;


           var last;


           if (dir == 'left') {undefined


               first = title.substr(0, 1);


               last = title.substr(1);


           } else {undefined


               first = title.substring(0, title.length - 1);


               last = title.substring(title.length - 1, title.length);


           }


           document.title = last + first;


       }, 1000)


       function setDir(d)


       {undefined


           dir = d;


       }


   </script>


</head>


<body>


   <input id="Button1" type="button" value="向左" οnclick="setDir('left')" />


   <input id="Button2" type="button" value="向右" οnclick="setDir('right')"/>


</body>


</html>


body、document对象的事件

onload(页面加载后触发)

网页加载完毕时触发,浏览器是一边下载文档、一边解析执行,可能会出现JavaScript执行时需要操作某个元素,这个元素还没有加载,如果这样就要把操作的代码放到body的onload事件中,或者可以把JavaScript放到元素之后。元素的onload事件是元素自己加载完毕时触发,body onload才是全部加载完成。

window.控件Id(不建议使用)

document.getElementById(“控件Id”);(推荐)

除了属性之外,当然还有通用的HTML元素的事件:onclick(单击)、ondblclick(双击)、onkeydown(按键按下)、onkeypress(点击按键)、onkeyup(按键释放)、onmousedown(鼠标按下)、onmousemove(鼠标移动)、onmouseout(鼠标离开元素范围)、onmouseover(鼠标移动到元素范围)、onmouseup(鼠标按键释放)、oncontextmenu(在浏览器中单击鼠标右键显示”右键菜单”时触发)等。

window对象的属性

window.location对象:

window.location.href=‘’;//重新导航到新页面,可以取值,也可以赋值。

window.location.reload();//刷新当前页

window.event是IE下非常重要的属性,用来获得发生事件时的信息,事件不局限于window对象的事件,所有元素的事件都可以通过event属性取到相关信息。类似于winForm中的e(EventArgs)。//兼容IE、Chrome,不兼容FF(用event参数)。

window.event.altKey属性,bool类型,表示事件发生时是否按下了alt键。类似的还有ctrlKey,shiftKey。演示:<input type="button" value="点击" οnclick="if(event.altKey){alert('Alt点击')}else{alert('普通点击')}" /> ;

clientX、clientY 发生事件时鼠标在客户区的坐标;screenX、screenY 发生事件时鼠标在屏幕上的坐标;offsetX、offsetY 发生事件时鼠标相对于事件源(比如点击按钮时触发onclick)的坐标。

<script type="text/javascript">


       document.onmousemove = function ()


       {//鼠标在文档上的位置。


           // document.title = window.event.clientX + "==" + window.event.clientY;


           //鼠标早屏幕上的位置。


           //document.title = window.event.screenX + '==' + window.event.screenY;


           //相对事件源的位置。


           document.title = window.event.offsetX + '==' + window.event.offsetY;


       }


   </script>


(window.event.returnValue)returnValue属性,如果将returnValue设置为false,就会取消默认行为的处理。在超链接的onclick里面禁止访问href的页面。在表单校验的时候禁止提交表单到服务器,防止错误数据提交给服务器、防止页面刷新。(οnsubmit="window.event.returnValue=false;")

window.event.returnValue不兼容火狐浏览器

例1:提交表单时,验证用户名是否为空,为空则取消提交动作。


<html xmlns="http://www.w3.org/1999/xhtml">


<head>


   <title>北京欢迎你</title>


   <script type="text/javascript">


       function btn_click() {undefined


           var txt = document.getElementById("txt").value;


           if (txt.length == 0) {undefined


               alert("请输入用户名!");


document.getElementById("txt").focus();//文本框获得光标


               window.event.returnValue = false;


           }


       }


   </script>


</head>


<body>


   <form action="HTMLPage2.htm">


   <input id="txt" type="text" />


   <br />


   <input id="Submit1" type="submit" value="submit" οnclick="btn_click()" />


   </form>


</body>


</html>


例2:判断超链接能否跳转


<html xmlns="http://www.w3.org/1999/xhtml">


<head>


   <title>北京欢迎你</title>


   <script type="text/javascript">


       function link_click(a) {undefined


           if (a) {undefined


           }


           else {undefined


               alert("无权限")


               window.event.returnValue = false;


           }


       }


   </script>


</head>


<body>


   <a id="link" href="HTMLPage2.htm" οnclick="link_click(0)">hjijiodhoih</a>


</body>


</html>


FireFox:e. preventDefault();取消事件的默认动作。

直接写return false;IE、FF、Chrome都可以。需要动态注册事件才可以实现。

例1: <html xmlns="http://www.w3.org/1999/xhtml">


<head>


   <title>北京欢迎你</title>


   <script type="text/javascript">


       window.onload = function() {undefined


           document.getElementById("Submit1").onclick = function() {undefined


               var txt = document.getElementById("txt").value;


               if (txt.length == 0) {undefined


                   alert("请输入用户名!");


                   document.getElementById("txt").focus(); //文本框获得光标


                   return false;


               }


           }


       }


   </script>


</head>


<body>


   <form action="HTMLPage2.htm">


   <input id="txt" type="text" />


   <br />


   <input id="Submit1" type="submit" value="submit" />


   </form>


</body>


</html>


例2:让超链接无效


<html xmlns="http://www.w3.org/1999/xhtml">


<head>


   <title>北京欢迎你</title>


   <script type="text/javascript">


       window.onload = function() {


           document.getElementById("link").onclick = function() {


               return false;


           }


       }


   </script>


</head>


<body>


   <a id="link" href="HTMLPage2.htm">hjijiodhoih</a>


</body>


</html>


//在FF下的写法


       function bodyClickHandlerOnFF(e) {


           if (e.altKey) {


               alert('按下alt键');


           } else {


               alert('普通点击!');


           }


       }


<body οnclick=“bodyClickHandlerOnFF(event);">


//在IE下的写法


       function bodyClickHandler() {


           if (window.event.altKey) {


               alert('press alt key');


           } else {


               alert('normal click');


           }


       }


<body οnclick=“bodyClickHandler();">


=========================兼容的写法===============================


<script type="text/javascript">


       document.body.onmousemove = function () {


           if (window.event) {


               document.title = '(' + window.event.clientX + ',' + window.event.clientY + ')';


           } else {


               document.title = '(' + arguments[0].clientX + ',' + arguments[0].clientY + ')';


           }


       }


</script>


window.event的属性(接上页):

srcElement:获得事件源对象。几个按钮共享一个事件响应函数用。****_click(object sender,EventArgs e)//IE、Chrome支持。见备注1。//FF下用e.target;

IE下:


function MyEventHandler() {


           var obj = window.event.srcElement;


           alert(obj.value);


}


<input type="button" value="click me!" οnclick="MyEventHandler();" />


FF下:


       function MyEventHandlerFF(e) {


           var obj = e.target;


           alert(obj.value);


       }


<input type="button" value="FF Click me" οnclick="MyEventHandlerFF(event);" />


//IE and FF


function TNB(e) {


           if (e.target) {


               alert(e.target.value);


           } else if (e.srcElement) {


           alert(e.srcElement.value);


           }


 }


button,发生事件时鼠标按键,IE:1为左键,2为右键,4中滑轮//要测试event.button的值的时候,请在onmousedown事件中测试。在onclick事件中只能识别鼠标左键的单击。不同浏览器返回值可能不一样。 (不同浏览器值不一样)

             <script type="text/javascript">    


             function mousedown()


             {undefined


                alert(event.button);


             }


   </script>


 <input id="Button1" type="button" value="/" οnmοusedοwn="mousedown()"/>


除IE浏览器外,其他浏览器在绑定事件处理函数时,有一个默认的参数即event对象。

(*)screen对象,获取屏幕的信息:

alert("分辨率:" + screen.width + "*" + screen.height);


       if (screen.width < 1024 || screen.height < 768) {undefined


          alert("分辨率太低!");


       }


clipboardData对象,对粘贴板的操作。//只支持IE,FF参考资料

setData("Text",val),设置粘贴板中的值。

例:


<script type="text/javascript">    


       function f1()


       {undefined


           var t = document.getElementById("txt").value;


           window.clipboardData.setData("text", t);


       }


</script>


<body>


   <input id="txt" type="text" value="http://www.qiushibaike.com"/>


   <input id="Button1" type="button" value="复制" οnclick="f1()"/>


</body>


getData(“Text”)读取粘贴板的值,返回值为粘贴板中的内容;

clearData(“Text”)清空粘贴板;

案例:复制地址给友好。见备注。

当复制的时候body的oncopy方法被触发,直接return false就是禁止复制。<body οncοpy="alert('禁止复制!');return false;"

很多元素也有oncopy(复制)、onpaste(粘贴)事件:oncut

案例:禁止粘贴帐号。

<input type="text" id="num1" οncοpy="alert('禁止复制'); return false;" οndrag="return false"/><br/>


 <input type="text" οnpaste="return false;" οndrag="return false"/>


案例:在网站中复制文章的时候,为了防止那些”拷贝党”不添加文章来源,代码:

<script type="text/javascript">    


       function ff()


       {undefined


           var t = clipboardData.getData("text");


           t = t + "<br/> 版权:www.srtc.org.cn";


           clipboardData.setData("text", t);


       }


</script>


<body οncοpy="setTimeout('ff()',100)">


   <span>shiusdhfiusdhuihfiusdh</span>


</body>


用户复制动作发生0.1秒以后再去改粘贴板中的内容。100ms只是一个经常取值,写1000、10、50、200……都行。不能直接在oncopy里修改粘贴板。不能直接在oncopy中执行对粘贴板的操作,因此设定定时器,0.1秒以后执行,这样就不再oncopy的执行调用栈上了。


history操作历史记录。

window.history.back()后退;window.history.forward()前进。


window.history.go(-1)后退、window.history.go(1)前进


document属性:

document属性是window对象中最复杂的属性。

因为使用window对象成员的时候可以省略window.,所以一般直接写document。

document的方法:

write();//向文档中写入内容。writeln(),和write差不多,只不过最后添加一个回车。在onclick等事件中写的代码会冲掉页面中的内容,只有在页面加载过程中write才会与原有内容融合在一起。writeln()是在源代码里面换行。与<br/>不一样。

document.write()经常在广告代码、整合资源代码中被使用。

内容联盟、广告代码、cnzz,不需要被主页面的站长去维护内容,只要被嵌入的js内容提供商修改内容,显示的内容就变了。例:

write经常在广告代码、整合资源代码中被使用


广告代码的例子:在http://heima8.com/注册一个账户(测试用 账户名:itcast0710 密码:123456),申请一个广告代码,然后放到页面中


整合资源的例子:百度新闻 http://news.baidu.com/newscode.html


百度新闻代码相当于页面中嵌入另外一个网站的js文件,js文件就是一个大的write语句,这样的好处就是主页面不用写死内容,被嵌入的js内容变了嵌入的内容就变了。


脚本的好处:


1.自动执行


2.动态生成。


=================example==================


<script type="text/javascript">


       var reffer = "";


       var url = "";


       if (window.parent != window.self) {undefined


           try { reffer = parent.document.referrer; }


           catch (err) { reffer = document.referrer; }


           try { url = parent.document.location; }


           catch (err) { url = document.location; }


       } else { reffer = document.referrer; url = document.location; }


       document.writeln("<iframe marginwidth='0' marginheight='0' frameborder='0' bordercolor='#000000' scrolling='no' src='http://pv.heima8.com/index.php?p=126292971&b=100002856&itemid1=107075271&reffer=" + escape(reffer) + "&url=" + escape(url) + "' width='468' height='60'></iframe>");


   </script>


(使用pre标签看write()与writeln()的区别,效果)。例:

<script type="text/javascript">


   document.write('<pre>');


document.write('1');


document.writeln('2');


document.write('3');


document.write('</pre>');


</script>


最基本的DOM遍历演示。

//遍历直接子节点,如需获得所有节点。需要放在页面的最后测试(或者是在onload里面,否则页面还没有加载完毕。)


var objHtml = document.documentElement;


for (var i = 0; i < objHtml.childNodes.length; i++) {undefined


  alert(objHtml.childNodes[i].nodeName);


}


getElementById(), (非常常用),根据元素的Id获得对象,网页中id不能重复。也可以直接通过元素的id来引用元素,但是有有效范围、form1.textbox1之类的问题(当元素放在form中的时候(在html页面中需要通过form.元素id)),因此不建议直接通过id操作元素,而是通过getElementById。

注:如果在网页中有id重复的元素,那么getElementById()获得的是


           //第一id为指定id的元素,而不是数组


           var txtctrl = document.getElementById('txt1');


getElementsByName(),根据元素的name获得对象,由于页面中元素的name可以重复,比如多个RadioButton的name一样,因此getElementsByName返回值是对象数组。

getElementsByTagName(),获得指定标签名称的元素数组,比如getElementsByTagName(“p”)可以获得所有的<p>标签。*表示所有标签。

此处切忌不要使用forin循环(forin循环循环的是键值对,不是对象本身。)。(问题多多:radio时有相同的key,第一个key是length等等。。)建议:使用for循环案例:实现checkbox的全选,反选

案例:点击一个按钮,被点击的按钮显示“呜呜”,其他按钮显示“哈哈”。

第一种写法


<html xmlns="http://www.w3.org/1999/xhtml">


<head>


   <title>北京欢迎你</title>



   <script type="text/javascript">


       function g() {undefined


           var strls = document.getElementsByName("11");


           for (var i = 0; i < strls.length; i++) {undefined


               strls[i].value = "哈哈";


           }


           window.event.srcElement.value = "呜呜!!"


       }


 


   </script>


</head>


<body>


   <input id="Button1" type="button" name="11" value="button" οnclick="g()" />


   <br />


   <input id="Button2" type="button" name="11" value="button" οnclick="g()" />


   <br />


   <input id="Button3" type="button" name="11" value="button" οnclick="g()" />


   <br />


   <input id="Button4" type="button" name="11" value="button" οnclick="g()" />


</body>


</html>


第二种写法


<html xmlns="http://www.w3.org/1999/xhtml">


<head>


   <title></title>


   <script type="text/javascript">


       window.onload = function () {undefined


           var inputs = document.getElementsByTagName("input");


           for (var i = 0; i < inputs.length; i++) {undefined


               if (inputs[i].type == "button") {undefined


                   inputs[i].onclick = function () {undefined


                   


                       for (var i = 0; i < inputs.length; i++) {undefined


                           if (inputs[i].type == "button") {undefined


                               inputs[i].value = "哈哈";


                           }


                       }


                       //触发事件的对象


                       event.srcElement.value = "呜呜";


                   }


               }


           }


       }


   </script>


</head>


<body>


   <input type="button" value="哈哈" /><br />


   <input type="button" value="哈哈" /><br />


   <input type="button" value="哈哈" /><br />


   <input type="button" value="哈哈" /><br />


   <input type="button" value="哈哈" /><br />


   <input type="button" value="哈哈" /><br />


   <input type="button" value="哈哈" /><br />


   <input type="button" value="哈哈" /><br />


   <input type="text" value="" /><br />


   <input type="text" value="" /><br />


   <input type="text" value="" /><br />


   <input type="text" value="" /><br />


</body>


</html>


练习:加法计算器。两个文本框中输入数字,点击【=】按钮将相加的结果放到第三个文本框中。

   <input type="text" id="num1" />+<input type="text" id="num2" />


   <input type="button" οnclick="calc()" value="=" /><input type="text" id="num3" />


       function calc() {undefined


           var s1 = document.getElementById("num1").value;


           var s2 = document.getElementById("num2").value;


           var i3 = parseInt(s1) + parseInt(s2);


           document.getElementById("num3").value = i3;


       }


案例:十秒钟后协议文本框下的注册按钮才能点击,时钟倒数。(btn.disabled = “” ,让元素可用。disabled=disabled,为不可用)disabled=true;

<html xmlns="http://www.w3.org/1999/xhtml">


<head>


   <title>北京欢迎你</title>



   <script type="text/javascript">


       var count = 10;


       var tmrId = setInterval("test()", 1000);


       function test() {undefined


           var btn = document.getElementById("btn");


           if (count > 0) {undefined


               btn.value = "请仔细阅读(" + count + ")秒";


               count--;


           } else {undefined


           btn.value = "同意";


           btn.disabled = false;


           clearInterval(tmrId);


           }


       }


       window.onload = function() {undefined


           test();


       }


   </script>


</head>


<body>


   <input id="btn" type="button" value="请仔细阅读(10)秒" disabled="disabled" />


</body>


</html>


练习:图片浏览器。

<html xmlns="http://www.w3.org/1999/xhtml">


<head>


   <title></title>


   <script type="text/javascript">


       window.onload = function () {undefined


           var ul = document.getElementById("mv");


           //获取ul中的a标签


           var links = ul.getElementsByTagName("a");


           for (var i = 0; i < links.length; i++) {undefined


               links[i].onclick = function () {//注册事件


                   var href = event.srcElement.href;


                   document.getElementById("i1").src = href;


                   return false;


               }


           }


       }


   </script>


</head>


<body>


   <ul id="mv">


       <li><a href="images/1.jpg">美女1</a></li>


       <li><a href="images/2.jpg">美女2</a></li>


       <li><a href="images/3.jpg">美女3</a></li>


       <li><a href="images/4.jpg">美女4</a></li>


   </ul>


   <br />


   <img id="i1" src="" />


</body>


</html>


目录
相关文章
|
11月前
|
Web App开发 JavaScript 前端开发
JavaScript Window - 浏览器对象模型
JavaScript Window - 浏览器对象模型
|
JavaScript 前端开发
JavaScript窗口(window)对象介绍
JavaScript窗口(window)对象介绍
95 0
|
JavaScript 前端开发
|
JavaScript 前端开发
|
JavaScript 前端开发
|
JavaScript 前端开发
|
JavaScript 前端开发
|
JavaScript 前端开发
|
Web App开发 JavaScript 前端开发
|
JavaScript 前端开发