当我尝试使用$(this).value=""
将文本输入设置为空白(单击时)时,这不起作用。我必须使用$(this).val('')
。
为什么呢?有什么不同? jQuery中val
函数背后的机制是什么?
$(document).ready(function() {
$('#user_name').focus(function(){
$(this).val('');
});
});
// error code: not working...
$(document).ready(function() {
$('#user_name').focus(function(){
$(this).value='';
});
});
答案 0 :(得分:74)
你想:
this.value = ''; // straight JS, no jQuery
或
$(this).val(''); // jQuery
使用$(this).value = ''
,您将空字符串指定为包装value
的jQuery对象的this
属性,而不是value
this
本身。
答案 1 :(得分:15)
$(this).value
试图调用jQuery对象的'value'属性,该属性不存在。原生JavaScript 在某些HTML对象上具有“值”属性,但如果您在jQuery对象上操作,则必须通过调用$(this).val()
来访问该值。
答案 2 :(得分:2)
请注意:
typeof $(this)
是 JQuery 对象。
和
typeof $(this)[0]
是 HTMLElement 对象
然后:
如果您想在HTMLElement上应用.val()
,可以添加此扩展名。
HTMLElement.prototype.val=function(v){
if(typeof v!=='undefined'){this.value=v;return this;}
else{return this.value}
}
然后:
document.getElementById('myDiv').val() ==== $('#myDiv').val()
并且
document.getElementById('myDiv').val('newVal') ==== $('#myDiv').val('newVal')
العكس
INVERSE:相反,如果你想为jQuery对象添加value属性,请按照以下步骤操作:
下载完整的源代码(未缩小),例如:http://code.jquery.com/jquery-1.11.1.js。
在L96之后插入行,将此代码value:""
添加到init这个新道具
在jQuery.fn.init
上搜索,它几乎是第2747行
value
道具指定一个值:(在返回法规之前添加this.value=jQuery(selector).val()
)
答案 3 :(得分:0)
你可以做的一件事是:
$(this)[0].value = "Something";
这允许jQuery返回该元素的javascript对象,并且可以绕过jQuery函数。