复制代码
代码如下:
<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>