我创建了一个jQuery插件
(function($) {
'use strict';
$.fn.charCount = function() {
return this.each(function(index,element){
$(element).keyup(function updateCharCounter() {
var $me = $(this),
maxLength = parseInt($me.attr('maxlength'), 10),
charCount = $me.val().length,
$counter = $me.siblings('.limit');
$counter.text('limit: ' + maxLength + ' characters. remainig: ' + (maxLength - charCount));
});
});
}
}(jQuery));
上面的代码它可以正常工作,因为我直接return this
对象
但是当我将代码更改为间接对象插件时不起作用
(function($) {
'use strict';
$.fn.charCount = function() {
$oThis=this;
$oThis.each(function(index,element){
$(element).keyup(function updateCharCounter() {
var $me = $(this),
maxLength = parseInt($me.attr('maxlength'), 10),
charCount = $me.val().length,
$counter = $me.siblings('.limit');
$counter.text('limit: ' + maxLength + ' characters. remainig: ' + (maxLength - charCount));
});
});
return $oThis;
}
}(jQuery));
你可以看这个插件:https://jsfiddle.net/djary/yo6nLmzg/3/
directly
和indirect
return this
为什么在这种情况下返回this.each
是有效但$oThis
不起作用?
哪里错了?
答案 0 :(得分:2)
如果您检查控制台,则可以看到错误为df = pd.merge(d1.assign(A=1), d2.assign(A=1), on='A').drop('A', 1)
print (df)
Name Age Subject Grade
0 Alice 18 Science A
1 Alice 18 Math C
2 Alice 18 English B
。这是因为您指定了df = pd.concat([d1.reindex(d2.index, method='ffill'), d2], axis=1)
print (df)
Name Age Subject Grade
0 Alice 18 Science A
1 Alice 18 Math C
2 Alice 18 English B
。这意味着所有变量定义必须以$oThis is not defined
为前缀 - 这是一种很好的做法。你不能懒惰,让JS引擎为你定义最高范围的变量。
要解决此问题,请使用use strict
另请注意,我修正了错字:var
应为var $oThis = this;
。