如何在此功能中获得“this”?

时间:2012-08-18 11:38:59

标签: javascript jquery twitter-bootstrap coffeescript

抱歉,我的javascript-fu不足以提出更好的问题。

我正在使用bootstrap(bootstrap-typeahead.js)的typeahead功能,但是Gudbergur Erlendsson here添加了修改。

我正在使用onselect功能,并希望操纵输入这里输入的内容(我真的写得很清楚),就像这样(使用coffeescript);

$('form input').typeahead
  source: list
  onselect: (obj) ->
    $(this).css('background-color','blue')

显然这不起作用,因为this不在onselect函数的范围内,但我怎么能在那里得到它?我希望这是有道理的。

2 个答案:

答案 0 :(得分:2)

the gist开始,我们看到了这一点:

var Typeahead = function ( element, options ) {
  this.$element = $(element)

和此:

select: function () {
  //...
  if (typeof this.onselect == "function")
      this.onselect(val)

和此:

$.fn.typeahead = function ( option ) {
    return this.each(function () {
        //...
        if (!data) $this.data('typeahead', (data = new Typeahead(this, options)))

如果你追踪,你会发现你的回调中应该有一个this.$element,所以:

onselect: (obj) ->
    // AFAIK, 'obj' is the thing you selected
    @$element.css('background-color', 'blue')

应该是您正在寻找的。

答案 1 :(得分:0)

如果this在onselect函数之外但不在函数范围内,请在函数外部执行that = this,然后您可以参考that而不是{{ 1}}在函数内。如果您有兴趣,请在此处详细了解thisPrivate Members in JavaScript

例如:

that