javascript中window对象

window是javascript的一个非常重要的核心对象。对于可以打开多个页面的浏览器(比如IE7等以上版本,或是FireFox,Opera……)window只针对当前的客户端窗体有效。下面介绍以下window的一些重要属性以及应用:

【屏蔽右键】

某些网站不允许复制,怎么办呢?办法就是屏蔽鼠标右键。代码可以这样写(注意:event.button属性必须且只能和mouse相关的事件——比如onmouseup/onmousedown/onmouseover使用)。

<body onmousedown="disableRightClick()">
    <p>
        点击此区域将无法弹出右键
    </p>
</body>

脚本:

function disableRightClick() {
    //右键在IE为2
    if (event.button == 2) {
        alert("禁止使用右键!");

          return false;

    }
}

以上方法在IE中有效,Chrome无效(会弹出警告框和右键菜单)。要禁用几乎全部浏览器的鼠标右键,可以使用document.oncontentmenu属性

<head>
    <title></title>
    <script src="MyJavaScript.js" type="text/javascript"></script>
    <script>
        document.oncontextmenu = function () { alert("禁止右键!"); return false;};
    </script>
</head>
<body>
</body>

注意:由于oncontentmenu是属性,所以在绑定一个匿名事件的时候必须有返回值(return false)不能省略!

这里顺便说一声:任何Html标签的onXXX事件可以绑定一个匿名事件,同样也可以绑定一个已定义的js函数。该函数根据实际情况可以选择有或者没有返回值

【Html文本框只能输入数字】

对于限制某些内容在文本框内的输入,可以使用window.event.keyCode配合(限于onkeypress/onkeydown/onkeyup)中

例如以下文本框只允许输入数字:

<script type="text/javascript">
        function AutoCheck() {
            var code = window.event.keyCode
            if (!(code >= 48 && code <= 57)) {
                return false;
         }
        }
    </script>

对应Html:

<input type="text" id="myText" onkeypress="return AutoCheck(event);" />

注意input标签中的return不能省略,因为该函数有返回值(如果省略会导致该事件继续执行,因为事件没有被取消)。

不过当把js语句中的return false改成window.event.returnValue=false;的时候是可以省略input标签中的return的,究其原因是因为event.returnValue赋布尔类型的值会决定该事件是否被执行(具体来说,我个人认为应该是阻止事件结果的产生,并不是取消事件!)。

进一步证明,现在我写这样的代码:

<script type="text/javascript">
        function AutoCheck(event) {
            event.returnValue = false;
            alert("OK");
         }
</script>

对应Html中:

<input type="text" id="myText" onkeypress="AutoCheck(event);" />

注意:当按下任意键的时候,该事件仍然被触发(弹出OK对话框,说明该事件并没有被取消,而是事件导致的结果——本来应该在文本框中输入的内容字符不能被输入了!)
而如果使用return false取代event.returnValue的话则不仅框不能弹出,而且什么也输入不了(因为return false也会取消事件的结果,并且因为return直接向事件属性返回一个布尔值,最终后继事件代码无法执行;相对而言,event.returnValue只是取消当前事件执行的结果的发生,并不影响后继代码的执行)。

posted @ 2012-05-28 14:26  Serviceboy  阅读(665)  评论(0编辑  收藏  举报