jquery函数val()不等于“$(this).value =”?

时间:2010-12-24 06:47:51

标签: jquery

当我尝试使用$(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='';
    });
});

4 个答案:

答案 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属性,请按照以下步骤操作:

  1. 下载完整的源代码(未缩小),例如:http://code.jquery.com/jquery-1.11.1.js

  2. 在L96之后插入行,将此代码value:""添加到init这个新道具 enter image description here

  3. jQuery.fn.init上搜索,它几乎是第2747行

  4. enter image description here

    1. 现在,为value道具指定一个值:(在返回法规之前添加this.value=jQuery(selector).val()enter image description here
    2. 立即享受:$('#myDiv')。value

答案 3 :(得分:0)

你可以做的一件事是:

$(this)[0].value = "Something";

这允许jQuery返回该元素的javascript对象,并且可以绕过jQuery函数。