JS中的THIS和WINDOW.EVENT.SRCELEMENT详解

JavaScript021

JS中的THIS和WINDOW.EVENT.SRCELEMENT详解,第1张

我们先看一个简单的例子:

复制代码

代码如下:

<input

type="text"

onblur="alert(this.value)"/>完全没有问题。

那么什么情况下不可以用?

fuction

method()

{

alert(this.value)

}

<input

type="text"

onblur="method()"/>

这个就不可以,因为method()是被响应函数调用的函数。

那么这种情况下怎么办?

方法一:

fuction

method(btn)

{

alert(btn.value)

}

<input

type="text"

onblur="method(this)"/>

没问题!

方法二:

fuction

method()

{

alert(window.event.srcElement.value)

}

<input

type="text"

onblur="method()"/>

没问题!window.event.srcElement取得触发事件的控件

我们在看一个稍微绕一点的例子

<head>

<script

type="text/javascript">

function

InitEvent()

{

var

inputs

=

document.getElementsByTagName_r("input")

for

(var

i

=

0

i

<

inputs.length

i++)

{

inputs[i].onblur

=

OnblurEvent

}

}

function

OnblurEvent()

{

//

OnblurEvent是onblur的响应函数,而不是被响应函数调用的函数

//

所以可以用this来获取发生事件的对象

if

(this.value.length

>

0)

{

this.style.backgroundColor

=

"white"

}

else

{

this.style.backgroundColor

=

"red"

}

}

</script>

</head>

<body

onload="InitEvent()">

<input

id="Text1"

type="text"

/>

<input

id="Text2"

type="text"

/>

<input

id="Text3"

type="text"

/>

</body>

</html>

我们再来看看2者之间的区别和联系

this:

下面先看一个例子:

<html>

<title>this与srcElement的区别</title>

<head>

<script

type="text/javascipt>"

function

btnClick(){

alert(this.value)

}

</script>

</head>

<body>

<input

type="button"

value="单击"

onclick="btnClick()"/>

</body>

</html>

此时弹出的答案为“undefined”,说明在调用函数时不能使用this.属性来获取。再看下一个例子:

<!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">

function

btnClick(btn){

alert(btn.value)

}

</script>

</head>

<body>

<input

type="button"

onclick="btnClick(this)"

value="单击"

/>

</body>

</html>

此时得出的答案为“单击”,此时为什么可以呢?从代码中可以看出,在onclick事件调用函数btnClick()时,将this当作参数传递给了函数。

综合以上:在函数调用时不能直接使用this.属性来获取,而必须将this当作参数传递。

window.event.srcElement:

下面看一个例子:

<!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">

function

btnClick(){

alert(window.event.srcElement.value)

}

</script>

</head>

<body>

<input

type="button"

onclick="btnClick()"

value="单击"

/>

</body>

</html>

此时得出的答案为“单击”,说明在调用函数时可以使用window.event.srcElement.属性来获取。

为什么this不能直接使用而window.event.srcElement可以直接使用呢?从单纯的字面上说this的意思是“当前”。在函数调用时,没有指定具体是哪一个控件,在函数中直接用this是不可以的。在第二段代码中就将this当成了参数传递,所以能得出正确的答案。

其实this和window.event.srcElement的使用区别是:如果要直接使用this.属性,此时的函数不能是被调用的而必须是响应函数,而window.event.srcElement则无此限制。

以上所述就是本文的全部内容了,希望大家能够喜欢。

this表示调用时间的对象,就是指这个事件的select。

一、js中onchange事件绑定怎么传参?previewImage的参数可以是this,这里指的是<input>这个标签。通过this.files来操作文件,比如this.files.length是文件的个数,this.files[index]指向对应的文件。previewImage的参数可以是也可以是event,指的是change这个事件。至于添加事件处理程序。

1.直接把js代码写在引号里,如

<input type="file" accept="image/*" onchange="alert

(event.type)" multiple/>

2.onchange = 函数名,函数声明在脚本中。如果"previewImage"不加()是不会执行的吧。

<input type="file" accept="image/*" onchange="previewImage

(this)" multiple/><script>function previewImage(obj){

alert(obj.files.length)

}</script>

3.DOM0级事件处理程序

<input type="file" accept="image/*" multiple/><script>document.getElementsByTagName("input")[0].onchange = function(){

alert(event.type)

}</script>

4.DOM2级事件处理程序

<input type="file" accept="image/*"  multiple/><script>document.getElementsByTagName("input")[0].addEventListener("change",function(){

alert(event.type)

})</script>`

或者IE7 8中为`<script>document.getElementsByTagName("input")[0].attachEvent("onchange",function(){

alert(event.type)

})</script>