"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
});
var email = $("#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也是新的对象?
这跟作用域完全没有关系,是因为你没搞清楚 jQuery 对象和原生 DOM node 的区别。
$('#email')
和document.getElementById('email')
是不一样的,前者是包裹了原生 node 对象的 jQuery 对象,后者是才一个原生的node对象。.val()
是只有jQuery对象才具有的方法,而.value
是一个原生的 input node 才具有的属性。这就是为什么$('#email').value
是undefined
。document.getElementById('email')
每次返回的都是同一个 node,而每次运行$('#email')
,都会创建并返回一个新的jQuery对象,只是这些 jQuery 对象包裹的是同一个 node。也就是说你的第一个email
变量和后来的$('#email')
不是同一个对象,所以你在后者身上自然找不到存在前者身上的val
这个属性。本来想给你一大堆文字来解释这其中的原理和背后的意义,但写多了我发现自己都晕了。还是直接给你看代码吧。。。
总结就是尽量保持一种风格不要随便混用