iOS 7 safari可能的javascript/dojo修剪bug

Jos*_*art 5 javascript safari dojo ios ios7

自iOS 7发布以来,我们收到的订单通过输入数据末尾缺少一个字符.

例如,如果我进入Tanveer b Bal名称字段,它将返回Tanveer b Ba.见下面的截图:

在此输入图像描述

我相信这个错误可能是由于trim我们在输入上使用的过滤器来删除空格.我们使用的dojo/_base/lang trim功能:https://github.com/dojo/dojo/blob/1.9/_base/lang.js#L510

String.prototype.trim ? function(str){ return str.trim(); } : function(str){ return str.replace(/^\s\s*/, '').replace(/\s\s*$/, ''); }
Run Code Online (Sandbox Code Playgroud)

还有其他人遇到过这个问题吗?

重现说明

  1. 访问http://demo.zoopcommerce.com
  2. 添加到购物车
  3. 查看
  4. 输入电子邮件地址和名称然后单击下一步
  5. 电子邮件地址可能现在缺少的最后一个字符

更新:

我在这里创建了一个修剪测试器:http://jsfiddle.net/QJFBL/embedded/result/但它似乎在iOS 7上工作正常.(创建了另一个具有更多依赖项的:http://jsfiddle.net/qmKvZ/8 /)

我也尝试在http://crossbrowsertesting.com/上的iOS 7虚拟机上实现我的实现,并再次起作用.

更新2: http : //www.browserstack.com/今天发布iOS7虚拟机.我试过我的收银台,结果喜忧参半.有时错误发生,有时不发生.但是,在一个简单的剥离版 http://jsfiddle.net/qmKvZ/9/embedded/result/上,这个bug仍然没有出现,这让我觉得可能有更深层次的问题?

Jos*_*art 6

我无法100%确认为什么在iOS端发生这种情况,但我可以确认修复.

从我所知道的(调试能力非常有限),当自动完成显示在输入上时,它不会传播最后一个keypress事件.由于dijit只监视keydown, keypress, paste, cut, input, compositionend事件,有时可能会错过输入的最后一个字符.

要修复此错误,请修改以下行:https://github.com/dojo/dijit/blob/1.9/form/_TextBoxMixin.js#L347 from:

this.own(on(this.textbox, "keydown, keypress, paste, cut, input, compositionend", lang.hitch(this, handleEvent)));
Run Code Online (Sandbox Code Playgroud)

this.own(on(this.textbox, "keydown, keypress, keyup, paste, cut, input, compositionend", lang.hitch(this, handleEvent)));
Run Code Online (Sandbox Code Playgroud)

基本上你只是添加keyup事件.一定不要以它处理的类似方式处理它keypress,keydown例如.https://github.com/dojo/dijit/blob/1.9/form/_TextBoxMixin.js#L238

我也会向dojo团队提交错误修复/问题.