【问题标题】:iOS 7 safari possible javascript/dojo trim bugiOS 7 safari 可能的 javascript/dojo 修剪错误
【发布时间】:2013-09-28 23:50:06
【问题描述】:

自 iOS 7 推出以来,我们收到的订单在输入数据的末尾缺少一个字符。

例如,如果我在名称字段中输入Tanveer b Bal,它将返回Tanveer b Ba。请看下面的截图:

我相信这个错误可能是由于我们在输入上使用trim 过滤器来删除空格。我们使用dojo/_base/langtrim函数: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 虚拟机上尝试了我的实现,并且再次成功。

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

【问题讨论】:

  • 您在三元组的第三个子句中缺少一个结束 }function(str){ return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
  • 谢谢。这实际上只是我的一个糟糕的复制和粘贴。代码没有那个错误。见:github.com/dojo/dojo/blob/1.9/_base/lang.js#L510

标签: javascript ios dojo safari ios7


【解决方案1】:

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

据我所知(调试能力非常有限),当 autocomplete 显示在输入上时,它不会传播最后一个 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 团队提交错误修复/问题。

【讨论】:

  • 您是否在这个问题上针对 dijit 填写了缺陷?我想确保它在即将发布的补丁版本中得到修复。如果你有票#,请告诉我,我会努力的。谢谢。
【解决方案2】:

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

【讨论】:

  • 是的。正如我所说,我认为一旦触发自动完成,keypress 事件就不会传播。有点烦人。
【解决方案3】:

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

【讨论】:

  • 我很高兴不仅是我,但我仍然无法解决问题。我确实创建了jsfiddle.net/QJFBL/embedded/result,但它在 ios7 中运行良好:S
  • 你有更多的运气吗?
猜你喜欢
  • 1970-01-01
  • 2019-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-25
  • 1970-01-01
  • 1970-01-01
  • 2013-12-19
相关资源
最近更新 更多