将事件传递给回调函数

时间:2015-07-07 22:39:08

标签: javascript this

我正在使用summernote api(http://summernote.org/#/deep-dive),并使用onkeyup的回调如下:

$('#summernote').summernote({
    height: 150,
    onkeyup: myFunction
});

表示html:

<textarea id="summernote"></textarea>

我将myFunction定义为......

var myFunction= function(e) {
    var num_chars = $(e.target).text().length
    console.log(num_chars);
}

现在我想将.bind()的一些参数传递给myFunction。 当我做的时候

onkeyup: myFuntion.bind(1,2)

$(this)或e.target不起作用,这可能与使用.bind()

时params的混乱方式有关。

如何使用bind?

维护e.target功能并将额外数据传递给函数

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

您不能以这种方式使用bind。您试图从函数的右侧部分应用参数(因为您希望第一个参数成为事件)。此外,bind(1, 2)this设置为1并将2传递给调用的函数。 看起来就像你想要这样的东西:

onkeyup: _.partialRight(myFunction, 1, 2);

function myFunction(event, data1, data2) {
  var numChars = $(e.target).text().length;
  console.log(numChars);
}

但是,你可能会失去this绑定。如果你想保留它,你应该再次使用bind,但是像这样:

onkeyup: _.partialRight(myFunction.bind($), 1, 2); // This will bind this to $

function myFunction(event, data1, data2) {
  var numChars = this(e.target).text().length; // because this is $
}
这个例子中的

_是lodash。

你这样做的原因(并且你不能使用bind)是因为bind部分适用于 left 。这意味着它会将您的参数首先传递给,然后在调用时传递给bound函数的任何参数将在之后传递。换句话说,使用原始设置,您可以得到:

myFunction(2, event); // "this" is 1

而不是你想要的,这是:

myFunction(event, 1, 2); // "this" is undefined behaviour

要做到这一点,您只需要部分应用上面的功能,这将为您提供所需的行为。我们使用partialRight的原因是因为这会导致首先应用传递给调用函数的所有参数,然后将参数传递给bind。如果你没有使用partialRight而是使用partial,那么你会得到这个:

myFunction(1, 2, event); // "this" is undefined behaviour

此位可能有点超出您的范围

bind将函数的ThisBinding设置为提供的this。传递的任何额外参数部分应用(从左侧)到函数,然后返回结果函数。这意味着下次调用结果函数时,它将调用您在bind中提供的ThisBinding的函数,以及您在bind中提供的参数,以及您作为welll传递的任何EXTRA参数

答案 1 :(得分:1)

我进一步审核了API文档,我认为答案可能位于提供的eventHandler()方法中。

您可以访问bindKeyMap(layoutInfo, keyMap),其中keyMap是对象。

也许类似于:$.summernote.eventHandler.bindKeyMap();会给出你需要的东西吗?

Documents for bindKeyMap()

Documents for eventHandler()