【发布时间】:2014-10-23 19:07:13
【问题描述】:
我有一个适用于 Keyup 的自定义绑定,当用户手动输入数据时,valueAccessor().call 可以正常工作并输入所需的下一个函数。然而,当我们对相同的数据进行条形码化,并发送相同的返回键时,(我已经用两种方法检查了发送的最后一个 keyCode 是 13)valueAccessor 不会进入下一个函数并退出。
我怀疑这可能与条形码数据输入字段的速度和随后的“输入”键有关。减慢输入条形码字符的速度会有所帮助吗?如果是,您建议采用什么方法?
ko.bindingHandlers.enterKey = {
init: function (element, valueAccessor, allBindings, vm) {
ko.utils.registerEventHandler(element, "keyup", function (event)
{
if (event.keyCode === 13) {
ko.utils.triggerEvent(element, "change");
valueAccessor().call(vm, vm);
}
return true;
}
);
}
【问题讨论】:
-
你确定它被解雇了吗? On key up 似乎不会以同样的方式捕捉程序化事件,但我可能错了......
-
我很确定它是。我在 Chrome 中的 if 语句下方放置了一个断点,它停在那里。我正在评估那里的 Keycode,它设置为 13。不过,我可能会误解我所看到的内容。
-
我不明白您所说的“valueAccessor 没有进入下一个函数并退出”是什么意思。你能解释一下吗?
-
当然,当数据通过键盘输入字段并且用户按回车键时,我观察到 keyCode = 13 然后代码进入 Triggerevent 然后调用 valueAccess().call ,然后调用另一个函数扫描,这是预期的行为。但是,当使用条码阅读器扫描相同的数据时,keyCode 的计算结果与之前一样为 13,调用 triggerEvent 并且代码会执行 valueAccess().call,但接下来不会调用 Scan数据是用键盘输入的。我在这两种方法中都比较了 vm,它们是相同的
-
附带说明,使用内置的
eventbinding 比自定义绑定处理程序 IMO 更合适,至少就代码所示而言。您只需执行event: { keyup: myCallback },如果需要冒泡,则从myCallback返回true。
标签: knockout.js barcode bindinghandlers