Javascript 如何在Internet Explorer中获取jquery默认样式行为

Javascript 如何在Internet Explorer中获取jquery默认样式行为,javascript,jquery,html,Javascript,Jquery,Html,很简单,我很难理解如何在IE11中模拟/复制preventDefault()的行为。 这是我的简单小提琴: 它适用于Chrome和Firefox,但不适用于IE11。get preventDafult()或等效工具如何在IE中工作 谢谢你的帮助 将事件对象的“returnValue”属性设置为false 在尝试将其作为函数调用之前,必须检查“preventDefault”属性是否存在,否则IE将给您一个异常。但是,您可以始终设置“returnValue”,非IE浏览器将忽略它 if ("prev

很简单,我很难理解如何在IE11中模拟/复制preventDefault()的行为。 这是我的简单小提琴:

它适用于Chrome和Firefox,但不适用于IE11。get preventDafult()或等效工具如何在IE中工作

谢谢你的帮助

事件
对象的“returnValue”属性设置为
false

在尝试将其作为函数调用之前,必须检查“preventDefault”属性是否存在,否则IE将给您一个异常。但是,您可以始终设置“returnValue”,非IE浏览器将忽略它

if ("preventDefault" in e)
  e.preventDefault();
e.returnValue = false;

请注意,IE(至少是旧版本)使用了一个全局
事件
对象,因此应该编写处理程序,以便在事件参数未传递时提取该对象。

问题不在于代码。您正在使用jQuery绑定事件。
e
参数不是本机事件对象,而是jQuery事件对象。它围绕本机进行包装,并围绕跨浏览器差异进行规范化

当您调用
e.preventDefault()时,您正在告诉jQuery对本机事件对象进行操作。它将确定是调用
preventDefault()
还是为您设置
e.returnValue

这里的问题在于JSFIDLE本身!它使用iframe来运行代码,jQuery 1.10.1无法访问这个iframe(在IE 11中)。这是一个jQuery错误。解决方案是将jQuery版本更改为“1.x(edge)”,因为此错误在较新版本的jQuery中已修复

您还可以访问jsfiddleurl的append
/show
(比如:),让它以完整页面而不是iframe的形式运行代码。这也将解决问题


编辑:在IE 11中,似乎
e.preventDefault()
将清除所有单选按钮。这看起来像是IE中的一个bug,正如jQuery中的一个bug(类似而不是不同):

我认为每个看到这一点的人都会受益于我提出的解决方法。 在这把小提琴中:

在一个集合中,我将“防止”默认值放在输入本身上——这不起作用。 但在第二组中,我在标签上添加了“防止”默认值——这确实有效。
因此,为了解决这个问题,将函数放在标签上,然后使用一些css隐藏实际输入,如这里所示:

这里的问题是JSFIDLE。它将您的代码加载到iFrame中,而jQuery存在一个bug,使得您的JavaScript代码无法在jQuery中运行。尝试在IE 11中转到或将jQuery版本更改为“1.x(edge)”,您将看到它工作正常。即使您将其从iframe中取出,它也不工作。在ie11中,单击单选按钮,取消选中先前选中的按钮(默认单选按钮行为的一部分),但在其他浏览器中,没有更改选中状态。嗯。。。我没注意到。这听起来像是IE的问题。请参阅:jQuery应该为您解决这个问题
e
不是本机事件,它是jQuery事件对象。我在搜索问题时发现了非常类似的建议。我在fiddle中尝试了这个解决方案,第二组单选按钮检查是否存在默认值,当它找不到时,我更改全局事件的returnValue属性。--但可惜它仍然不起作用
if ("preventDefault" in e)
  e.preventDefault();
e.returnValue = false;
$(".defaulttest").click(function(e)
{
e.preventDefault();
});
$(".labeltest").click(function(e)
{
e.preventDefault();
});