我们在需要支持IE 8的应用程序中使用Knockout和jQuery(在其他几个浏览器中).我们有一个案例需要对一个元素使用Knockout点击绑定,对另一个元素使用jQuery点击处理程序.但是,我们发现这两种类型的点击处理程序在IE 8中相互冲突(它们在我们所有其他支持的浏览器中可以很好地协同工作).
我们将问题简化为一个简单的可重复的例子.如果您的计算机上没有IE 8,可以通过选择"浏览器模式:IE8"在较新版本的IE中测试它:
使用该设置,您可以在此jsbin中查看冲突.这段代码是:
A B
单击"A"时,将显示预期警报.但是,当您单击"B"时,alert("A")
会错误地调用:
我们找到了两个解决这个问题的"解决方案",但它们都不适用于我们的应用程序.让这两个点击处理程序同时在IE 8中工作的第一种方法是删除ko if: CanViewPage
.这可以在这个jsbin中看到.这个"解决方案"是不可行的,因为它是我们在许多页面上的这个大型应用程序中使用的核心页面视图权限机制.
我们发现的第二个"解决方案"是颠倒导入jQuery和Knockout的脚本标签的顺序.这可以在这个jsbin中看到.这种"解决方案"也不可行,因为这些导入是通过母版页包装器控制的 - 改变这需要大量的QA工作来重新测试整个应用程序的错误.
请注意,因为我们必须支持IE8,所以jQuery 2.x或更新版本不是一个选项.
有没有人有这些限制的另一种解决方案?任何人都可以解释为什么会这样吗?