javascript作用区域不理解的地方请教。

```javascript
/*df是inport输入的内容第5次修改
$("#name").blur(function(){
alert(function(){name.val()});//function(){email.val()}
alert(name.value);//undefined
alert($('#name').val());//df
alert($('#name').value);//undefined
alert(this.value);//df
alert(function(){this.val()});//function(){this.val()}
alert($(this).value);//undefined
alert($(this).val());//df
});
varemail=$("#email");
email.val=email.val();
email.blur(function(){
alert("email")
alert(function(){email.val()});//function(){email.val()}
alert(email.value);//undefined
alert(email.val);//没有输出...
alert("$('#email')")
alert($('#email').val());//df
alert($('#email').val);//JQ
alert($('#email').value);//undefined
alert("this")
alert(function(){this.val()});//function(){this.val()}
alert(this.value);//df
alert(this.val);//undefined
alert($(this).val);//JQ
});
```
alert(email.val);没有输出是不是email也是新的对象?
ABOUTYOU
浏览 329回答 2
2回答

DIEA

这跟作用域完全没有关系,是因为你没搞清楚jQuery对象和原生DOMnode的区别。$('#email')和document.getElementById('email')是不一样的,前者是包裹了原生node对象的jQuery对象,后者是才一个原生的node对象。.val()是只有jQuery对象才具有的方法,而.value是一个原生的inputnode才具有的属性。这就是为什么$('#email').value是undefined。需要注意的是document.getElementById('email')每次返回的都是同一个node,而每次运行$('#email'),都会创建并返回一个新的jQuery对象,只是这些jQuery对象包裹的是同一个node。也就是说你的第一个email变量和后来的$('#email')不是同一个对象,所以你在后者身上自然找不到存在前者身上的val这个属性。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript