che*_*gat 10 forms django html5 internet-explorer-10 internet-explorer-11
当我尝试将值插入到带有步骤属性集的数字类型的输入字段时,我的网站的某些用户似乎遇到了问题.
我正在使用Django 1.6将表单呈现为HTML.
数字字段映射到基础DecimalField模型字段,其中max_digits = 25,decimal_places = 5
这导致以下示例html呈现为数字字段:
<input type="number" value="" step="0.00001" name="quantity" id="id_quantity">
Run Code Online (Sandbox Code Playgroud)
我知道的step属性在FireFox中尚不支持,但在Opera,Chrome,Safari和IE10 +中
除了IE10和IE11之外,所有浏览器都能正常运行.在上面的示例中,IE10和IE11中可输入的最大范围是-227到227.如果我尝试输入比此更低或更高的值,我会收到"您必须输入有效值"错误,并且无法提交表单.
根据http://www.w3schools.com/tags/att_input_step.asp
step属性指定元素的合法数字间隔.
示例:如果step ="3",则合法数字可以是-3,0,3,6等.
因此,在我的用户示例中,他们尝试输入20000作为IE10和IE11中失败的值.如果我的计算正确20000正确地落入0.00001的区间
对我来说,一个解决方案可能是从我所有使用数字字段的表单中删除step属性,可以通过django表单或使用javascript,但我认为这将是一个非常混乱的解决方案,并且与HTML5格式相悖.
有没有其他人遇到类似的问题,我做错了什么或这是IE10和IE11中的错误?
欢迎任何想法,评论或答案.与此同时,我将被迫通过建议使用可用的浏览器向受影响的用户提供我常用的解决方案.
ndm*_*ndm 10
你并不孤单,IE在这方面很不错.
我不确定IE10,我现在只能测试IE11,它有点将number字段视为date字段,它实际上根本不应该支持,仍然在传递时例如20000它说" 插入有效日期 "(最初" Geben SieeingültigesGeatumein ").
事实上,当输入类似的东西01.01.2000或01-01-2000它通过验证,虽然甚至20000.01.123456789通过,就像90000或0.foobar,所以我想验证只是完全搞砸了.
所以暂时你可能不得不使用某种polyfill,以防你想取悦IE用户.
在这种情况下,IE10的HTML5表单验证确实存在问题,因此您可能需要考虑禁用此表单的HTML5表单验证.
您可以通过向表单标记添加novalidate属性来完成此操作.例如,您可能希望执行以下操作:
<form method='POST' action='.' novalidate='novalidate'>
<input type="number" value="" step="0.00001" name="quantity" id="id_quantity">
</form>
Run Code Online (Sandbox Code Playgroud)
设置novalidate会告诉浏览器不要尝试有用,这应该可以解决您的问题.但请注意,这将禁用所有浏览器的整个表单的HTML5验证.如果你需要在从IE中删除它时为某些浏览器保留这个,你必须在检查浏览器用户代理后通过Javascript在页面加载时添加novalidate属性.这个用户代理可能是欺骗性的,因此它不是一个理想的解决方案.