'this'是否指的是调用此函数的元素?

时间:2011-04-29 00:08:12

标签: javascript jquery jquery-ui reference this

在下面的代码片段中,我使用$(this)来引用调用函数的元素。我知道这是不正确的,因为我打印出了值,它给了我'undefined'。我如何参考输入元素?

$(function() {
    $( ".datepicker" ).datepicker({
        onSelect: function (date, obj){
                if(confirm('Is this correct?: '+ date )) {
                    $.post('edit.php', {
                        "row": $(this).data('id'),
                        "date":date,
                        "field":$(this).name,
                        "ajax":'true'
                        });
                    }
                }
    });
});

这是html元素:

<input 
name="appvAcadVp" 
data-id="someid"  
class="datepicker" size="10" 
type="text"
placeholder="someholder"
>

2 个答案:

答案 0 :(得分:8)

jQuery设置this本身,通常指向当前元素。

否则,在JavaScript中......

作为分配给职业的职能

var a = {
   b: function() {
      // `this` is `a`
   }
}

a.b();

除外,其中属性被分配给变量。观察...

var c = a.b;
c(); // the `this` will point to `window`

作为分配给变量的函数

var a = function() {
   // `this` is `window`
}

a();

作为构造函数

var C = function() {
   // `this` is `c`
}

var c = new C();

请注意,如果您忘记使用new进行实例化,JavaScript会将这些属性分配给全局对象(浏览器中为window)。


在全球范围内

// In global scope `this` is `window`
var d = this;

使用call()apply()

进行调用

您还可以使用thiscall()函数方法明确设置apply()


现在,你的问题......

  

感谢'this'的解释,但我仍然不明白为什么引用在我的代码中不起作用

道歉。

$(this).name将不起作用,因为this现在是一个jQuery对象,并且只有少数属性(其中没有一个是name)。

使用$(this).attr('name')或使用jQuery对象删除this,只需访问this.name

答案 1 :(得分:1)

这是onSelect函数中obj参数的含义,因此您引用$(obj)。仅供参考,this将引用相关的输入字段。

供参考,请参阅:http://jqueryui.com/demos/datepicker/&gt;活动&gt; ONSELECT