0

在我看来,在 IE7/IE8 中使用时,Knockout 中似乎存在错误,但这可能是一个已知问题,或者(更有可能)我处理错误并需要更正。我将不胜感激您出色的人们可以提供的任何帮助。

当我使用 jQuery 的 $.click() 将单击处理程序绑定到元素时,如下所示,它通常在 IE7/IE8/IE9 中运行良好。我遇到问题的地方是元素(在这种情况下是一个按钮,但它也适用于我的测试中的其他元素类型)是否位于由 Knockout 绑定的 DOM 结构内。遗憾的是,这只发生在 IE7/IE8 中,所以我在底部分享的 jsFiddle 链接可能价值有限。在 IE9(不出所料)中,行为按预期工作。

这似乎也不会影响没有 jQuery 绑定的事件(在纯 javascript 中使用 element.attachEvent)。

<div data-bind="with:ContainerObject">
    <div data-bind="text:ContainedProperty"></div>
    <input id="alertButtonJQBad" type="button" value="jq/ko=broken" />
</div>

function jqClickBad() { alert("nested click() handler bound by jquery"); }
// this fires fine in IE9, but not in IE7/IE8:
$("#alertButtonJQBad").click(jqClickBad);
var viewModel = {
    ContainerObject: {
        ContainedProperty: "test"
    }
};
ko.applyBindings(viewModel);

http://jsfiddle.net/csiefken/WckWb/3/

4

1 回答 1

1

我什至不能在 IE8 中运行 JS fiddle。jsFiddle 对我来说似乎没有正确显示。

一般来说,如果您使用常规的 jQuery 事件绑定而不是 KO 事件绑定,那么您将违反规定。如果你真的需要使用 jQuery 来注册你的处理程序而不是 Knockout 事件绑定,那么要么在之后 ko.applyBindings进行注册,要么使用实时事件处理程序(通过向 提供 css 选择器$.on()),这样你的绑定将在 Knockout 执行的任何潜在的 DOM 重写中存活下来。

于 2013-07-01T16:36:35.780 回答