5

自 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*$/, ''); }

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

复制说明

  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 VM 上尝试了我的实现,并且再次成功。

更新 2: http : //www.browserstack.com/ 今天发布一个 iOS7 虚拟机。我试过结帐,结果好坏参半。有时会发生错误,有时不会。但是,该错误仍然根本没有出现在简单的剥离版本http://jsfiddle.net/qmKvZ/9/embedded/result/上,这让我认为可能存在更深层次的问题?

4

3 回答 3

6

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

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

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

this.own(on(this.textbox, "keydown, keypress, paste, cut, input, compositionend", lang.hitch(this, handleEvent)));

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

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

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

于 2013-10-14T04:55:43.497 回答
1

我在非 dojo 应用程序上看到了同样的问题。似乎在 iOS7 中更改了 keypress / keydown/ keyup 处理程序,因为代码在 iOS6 中有效,但在 iOS7 中被修剪

于 2013-10-18T16:52:36.620 回答
0

我肯定看到我们的 dojo 应用程序存在同样的问题。从 data-dojo-props 中删除 trim:true 可以解决问题,尽管这只能是一个临时解决方案。

于 2013-10-06T17:02:47.283 回答