将事件传递给回调函数



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

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

:

<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()

时参数的排列方式有关。

我如何维护e.t artarget功能和传递额外的数据与bind函数?

不能这样使用bind。您正在尝试从函数的右侧部分应用参数(因为您希望第一个参数是事件)。另外,bind(1, 2)设置this1,并将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部分地从应用。这意味着它将首先传递你的参数,然后在调用绑定函数时传递给它的任何参数将在之后传递。换句话说,在您的原始设置下,您会得到这样的结果:

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中提供的参数,以及您传递的任何EXTRA参数来调用该函数

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

这里你可以访问bindKeyMap(layoutInfo, keyMap),其中keyMap是一个对象。

也许像:$.summernote.eventHandler.bindKeyMap();会给你需要的东西?

bindKeyMap()的文档

Documents for eventHandler()

最新更新