在下面的代码片段中,我使用$(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"
>
答案 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()
您还可以使用this
和call()
函数方法明确设置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