首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Knockout.js正在返回Internet中焦点绑定的未定义事件

Knockout.js正在返回Internet中焦点绑定的未定义事件
EN

Stack Overflow用户
提问于 2013-06-07 18:35:23
回答 2查看 1.4K关注 0票数 0

我试图将Knockout.js和jQuery自动大小插件用于评论流系统。基本上,当一个注释输入被聚焦时,我使用如下所示的Knockout.js事件绑定:

代码语言:javascript
复制
data-bind="event: {focus: $parent.autosize, blur: $parent.resize}"

在我的模型中,我按照以下方式实现了autosize函数:

代码语言:javascript
复制
$self.autosize = function(data, event) {
    var textarea = $(event.target);
    textarea.autosize();
});

然而,据我所知,eventundefined,我无法使用它来查找文本区域,以便在其上调用autosize()。我也无法查询textarea的属性,当我使用console.log查找event的值时,将返回undefined

这似乎只发生在Internet中。特别是第8-9版。IE 10以及Chrome、Firefox等都按预期工作。Knockout.js事件绑定和Internet是否存在这样的已知问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-07 18:58:05

在IE中,您需要访问event.srcElement而不是event.target。所以,你可以做var textArea = $(event.target || event.srcElement);

不过,另一种类似于"Knockout“的解决方案是添加一个快速的自定义绑定,将该逻辑排除在视图模型之外,如下所示:

代码语言:javascript
复制
ko.bindingHandlers.autosize = {
  init: function(element) {
      ko.utils.registerEventHandler(element, "focus", function() {
          $(element).autosize();
      });

      ko.utils.registerEventHandler(element, "resize", function() {
           //whatever you call here
      });

  }
};

然后,将data-bind="autosize: true"放在元素上即可。

票数 1
EN

Stack Overflow用户

发布于 2013-06-07 21:22:04

Ryan的答案是一个很好的解决“自动大小”问题的方法,但我也想进一步解释缺乏event.target的问题。当使用jQuery处理事件时,jQuery将标准化event对象以包括target,即使浏览器不包括它。

如果jQuery是存在的(从而提供了event.target),那么它将使用jQuery进行事件处理,但要做到这一点,jQuery需要在加载Knockout时出现。那么,简单地说,如果您想要正确地集成这两者,就应该在jQuery之前将其包含在HTML中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16990772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档