淘汰嵌套绑定会干扰IE7 / IE8中的jquery点击

时间:2013-07-01 15:51:42

标签: jquery internet-explorer dom knockout.js

在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/

1 个答案:

答案 0 :(得分:1)

我甚至无法在IE8中运行JS小提琴。 jsFiddle似乎没有正确显示给我。

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