Safari存在文本输入问题,用户输入时会选择文本,导致文本丢失
Safari issue with text inputs, text is selected as user enters it causing text to be lost
我的页面上有以下输入元素:
<input class="input" name="custom_fields[new]" placeholder="Enter placeholder" type="text">
我有一个关于这个元素的Twitter飞行事件监听器,看起来像这样:
this.on('keyup', {
inputsSelector: this.updateViewInputs
});
是什么触发了这种方法:
this.updateViewInputs = function(ev) {
var isDeletionKeycode = (ev.keyCode == 8 || ev.keyCode == 46);
// Remove field is user is trying to delete it
if (isDeletionKeycode && this.shouldDeleteInput(ev.target.value, this.select('inputsSelector').length)) {
$(ev.target.parentNode).remove();
}
// Add another field dynamically
if (this.select('lastInputsSelector')[0] && (ev.target == this.select('lastInputSelector')[0]) && !isDeletionKeycode) {
this.select('inputsContainer').append(InputTemplate());
}
// Render fields
that.trigger('uiUpdateInputs', {
inputs: that.collectInputs()
});
}
最后触发uiUpdateInputs:
this.after('initialize', function() {
this.on(document, 'uiUpdateInputs', this.updateInputs)
});
this.updateInputs = function(ev, data) {
// Render all inputs provided by user
this.select('inputListSelector').html(InputsTemplate({ inputs: data.inputs }));
}
所有这些功能在Chrome和Firefox上都能正常工作。用户可以在输入中键入内容,并"实时"查看页面更改。用户还可以获得额外的字段,可以在其中输入文本并查看页面更改。
使用Safari时会出现问题,当用户在所描述的输入字段中输入文本时,输入字段中的文本会高亮显示(选中),当用户输入下一个字符时,所有内容都会被该单个字符替换。这导致用户在将其全部替换为下一个输入的字符之前,不能输入超过1或2个字符。
我尝试了几种方法来解决这个问题,但都没有奏效,它们包括:
- 使用setTimeout延迟keyup事件上的代码运行
- 使用"选择"尝试使用collapseToEnd禁用对文本的选择
- 使用单击、聚焦、模糊事件尝试从输入的文本中删除所选内容
- 触发向右箭头键事件,尝试简单地向前移动光标,这样用户就不会删除所选文本
- 使用setInterval常规删除窗口所做的选择
我很困惑为什么会发生这种情况,我想知道这是否是Flight的webkit中的错误。我认为这个页面的Firefox或Chrome版本没有问题。谢谢你的帮助!
这似乎是Safari某些版本的问题。在javascript中监听keyup函数时,它会自动选择框中的所有文本,然后在键入下一个键时将其全部删除。要防止这种情况发生,请对传递给keyup函数的事件对象调用preventDefault。
this.on('keyup', function(e) {
e.preventDefault()
});
相关文章:
- 让文本输入幻灯片显示输入时的新文本输入?然后向后滑动
- Sails.js:同时发布文本输入和一个文件
- 来自文本输入null的html javascript变量
- 当没有文本输入聚焦时检测空格键按下
- JS中的按钮和文本输入
- JavaScript:在调用函数的文本输入上按enter键
- jQuery自动完成功能不适用于多个文本输入
- 使用JS从选择和文本输入中捕获值,并将输出返回到HTML
- 如何通过jQuery发送选定的元素和文本输入
- HTML如何根据javascript函数的返回值限制文本输入
- jquery插件或javascript方法自动调整文本输入(而非文本区域)(固定宽度)可变高度的大小
- 在jquery中获取文本输入val始终为空
- HTML文本输入大小
- 文本输入与文本区域
- 角度ui选择标记模糊时丢失文本输入
- 文本输入值中的JavaScript变量
- Angular指令中的最佳实践是将文本输入设置为英尺和英寸的格式
- 如何在不通过模型验证的情况下屏蔽文本输入中输入的字符
- 在文本输入区域中创建双向更新
- 不使用自定义CSS或HTML(使用框架方法)的角度材质文本输入或文本区域标签大小