【问题标题】:jquery function val() is not equivalent to "$(this).value="?jquery 函数 val() 不等于 "$(this).value="?
【发布时间】:2010-12-24 06:47:51
【问题描述】:

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

【问题讨论】:

    标签: jquery


    【解决方案1】:

    你想要:

    this.value = ''; // straight JS, no jQuery
    

    $(this).val(''); // jQuery
    

    使用$(this).value = '',您将一个空字符串分配为包装this 的jQuery 对象的value 属性——而不是this 本身的value

    【讨论】:

      【解决方案2】:

      $(this).value 正在尝试调用不存在的 jQuery 对象的“值”属性。本机 JavaScript 确实在某些 HTML 对象上具有“值”属性,但如果您在 jQuery 对象上进行操作,则必须通过调用 $(this).val() 来访问该值。

      【讨论】:

        【解决方案3】:

        请注意:

        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')
        

        العكس逆:

        如果你想给 jQuery 对象添加 value 属性,请按照以下步骤操作:

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

        2. 在 L96 之后插入行,添加此代码 value:"" 以初始化此新道具

        3. 搜索jQuery.fn.init,差不多是第2747行

        1. 现在,为value prop 赋值:(在return 语句前添加this.value=jQuery(selector).val()

        立即享受:$('#myDiv').value

        【讨论】:

          【解决方案4】:

          您可以这样做:

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

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

          【讨论】:

          • 这很傻,但你应该使用的不是this,而是原始的CSS选择器。
          【解决方案5】:

          您可以使用它来获取元素的价值

          this.val()
          

          【讨论】:

          • 这与this other answer 中的解决方案相同。 在回答已有答案的旧问题时,请确保提供新颖的解决方案或比现有答案更好的解释。
          • 好的!谢谢...我会尽量观察
          猜你喜欢
          • 1970-01-01
          • 2012-03-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-01-20
          • 2022-11-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多