Django Internet Explorer 10和Internet Explorer 11中的HTML5数字输入字段步骤属性已断开

Django Internet Explorer 10和Internet Explorer 11中的HTML5数字输入字段步骤属性已断开,django,html,forms,internet-explorer-10,internet-explorer-11,Django,Html,Forms,Internet Explorer 10,Internet Explorer 11,似乎我的网站的一些用户在尝试将值插入到设置了step属性的number类型的输入字段时遇到了问题 我使用Django 1.6将表单呈现为HTML 数字字段映射到一个基本的DecimalField模型字段,最大位数=25,小数位数=5 这将导致为数字字段呈现以下示例html: <input type="number" value="" step="0.00001" name="quantity" id="

似乎我的网站的一些用户在尝试将值插入到设置了step属性的number类型的输入字段时遇到了问题

我使用Django 1.6将表单呈现为HTML

数字字段映射到一个基本的DecimalField模型字段,最大位数=25,小数位数=5

这将导致为数字字段呈现以下示例html:

<input type="number" value="" step="0.00001" name="quantity" id="id_quantity">

我知道的step属性在FireFox中还不受支持,但在Opera、Chrome、Safari和IE10中都有+

除了IE10和IE11之外,所有浏览器都可以正常工作。在上述示例中,在IE10和IE11中可以输入的最大范围为-227到227。如果我尝试输入一个低于或高于此值的值(分别),我会收到“您必须输入有效值”错误,并且无法提交表单

步骤属性指定元素的合法编号间隔

示例:如果步骤=“3”,则法定数字可以是-3、0、3、6等

因此,在我的用户示例中,他们试图输入20000作为在IE10和IE11中失败的值。如果我的计算正确,20000将正确地落在0.00001的区间内

对我来说,一个解决方案可能是通过django表单或使用javascript从所有使用数字字段的表单中删除step属性,但我认为这将是一个非常混乱的解决方案,并且与HTML5的粒度背道而驰

是否有其他人遇到过类似的问题,我是否做错了什么,或者这是IE10和IE11中的一个bug


欢迎有任何想法、评论或回答。与此同时,我将被迫向受影响的用户提供我通常的解决方案,建议他们使用一个能正常工作的浏览器。

你并不孤单,IE在这方面有很多问题

我不确定IE10,我现在只能测试IE11,它有点将
number
字段视为
date
字段,实际上它根本不应该支持这些字段,但当传递例如
20000
时,它会说“插入有效日期”(最初是“Geben Sie ein gültiges Datum ein”)

事实上,当输入诸如
01.01.2000
01-01-2000
之类的内容时,它通过了验证,尽管
20000.01.123456789
也通过了验证,就像
90000
0.foobar
一样,所以我猜验证完全搞砸了


因此,目前您可能需要使用某种polyfill,以满足IE用户的需求。

看起来IE10+需要一个最小值和最大值才能正常工作。如果您定义了这些值,它将与10000值一起正常工作:

<input type="number" value="" step="0.00001" min="-100000" max="100000" name="quantity" id="id_quantity" />

数字输入的步长属性似乎与需要最小值、最大值和步长值的范围输入一样实现


如果你不能定义一个最小值和最大值,你必须使用JavaScript来做。在这种情况下,

IE10的HTML5表单验证真的很糟糕,所以你可能想考虑禁用这个表单的HTML5表单验证。

可以通过向表单标记添加novalidate属性来完成此操作。例如,您可能希望执行以下操作:

<form method='POST' action='.' novalidate='novalidate'>
    <input type="number" value="" step="0.00001" name="quantity" id="id_quantity">
</form>


设置novalidate将告诉浏览器不要试图变得有用,这将解决您的问题。但是,请注意,这将对所有浏览器的整个表单禁用HTML5验证。如果在从IE中删除时需要为某些浏览器保留此属性,则必须在检查浏览器用户代理后通过Javascript在页面加载中添加novalidate属性。但是,此用户代理可能会被欺骗,因此它不是一个理想的解决方案。

我遇到了相同的问题,并在字段级别添加了
step=“any”
为我解决了这个问题。

谢谢ndm,很高兴我不是唯一一个这样做的人。我希望我可以避免使用多边形填充来迎合IE开发中的失败,我相信这会影响很多网站用户。这是一个相当微妙的错误。你在哪个操作系统上测试过这个?对我来说,IE11以及模拟IE10的开发工具显示出与没有
min
/
max
属性时相同的行为。太棒了!我遇到了一个“有趣”的问题,IE会在步骤0.1、值1.1、1.2和1.4中失效,但其他一切都会按计划进行。。这修正了行为这在我的情况下不会改变任何东西