1

我正在使用的网站使用Prototype 1.6.1。它的Event.stop()在IE9中不起作用。我知道Prototype 1.7解决了这个问题。但是,如果我无法升级到Prototype 1.7,是否有散步?在IE 9中停止事件(未升级到Prototype 1.7)

我需要该网站与IE 7,8和9(以及Chrome,Firefox等)兼容。

谢谢!

编辑:我试过event.preventDefault(),它不适合我在IE 9在这里工作是一个例子:http://jsfiddle.net/garthcn/AdR7g/ 它的工作原理的jsfiddle /铬/ Firefox浏览器。如果您将代码粘贴到HTML文件并使用IE9打开它,它将无法工作。编辑2:我刚刚发现原型1.6.1增加了自己的preventDefault()方法IE浏览器不能在IE9上工作。但是,IE9自带preventDefault()其实际工作。所以,如果我坚持原型1.6.1,我想我不能让preventDefault()对IE 9

+2

您可以随时比较1.7和1.6.1的Event.stop()代码,以查看IE9修复程序是什么,然后将其复制到您的版本中。 –

+0

@Marc B我进入了Prototype 1.7的'Event.stop()'方法。它似乎只是调用'event.preventDefault()'和'event.stopPropagation()'。此外,这两种方法不是Prototype的一部分。但是,如果我用Prototype 1.6.1明确地调用它们,事件仍然不会停止。我相信我错过了一些东西,但我没有发现它是什么。谢谢! – garthcn

+1

@garthcn:原型覆盖IE中的那些方法。也许这是问题? – hugomg

回答

2
function stopDefAction(evt) { 
    evt = evt || event; 
    if (evt.preventDefault) { 
      evt.preventDefault(); 
    } 
    else { 
      evt.returnValue = false; 
    } 
} 
+0

没有为我工作。这似乎只是preventDefault的内部实现正在做什么,所以......有点多余。 – jinglesthula

0

工作好像内部原型是延伸,其中 - IE9下 - 打破东西。没有升级,容易的事情将是在您的头标签顶部(但低于charset标签)添加一个x-ua兼容元标签强制IE9成为小于9的IE。

如果你有能力,你也可以尝试直接修补原型: http://mandagreen.com/prototype-1-6-event-stop-ie9-quick-patch/ 这是写为1.6.0,但我认为它应该为1.6.1。我有同样的问题,并可能会尝试看看会发生什么。

+0

我能找到的唯一方法就是使用不同的库。我们目前正在迁移到jQuery,因此我们以noConflict模式运行它,并且能够连接提交处理程序,并让其他提交处理程序代码按原样运行 – jinglesthula