javascript - 为什么在js取消设置只读标签后iOS不显示键盘输入?
问题描述
我有一个设置为只读UITextField
的表格。HTML
输入时,javascript 应该测试该字段当前是否正在被其他人编辑,如果不是,则 readonly 将设置为 false 并允许编辑该字段。为此,我使用了 onFocus() 事件。
这在 Chrome 和 Firefox 中运行良好,但在 iOS 设备上没有显示屏幕键盘。我怀疑即使脚本将其设置为 false,iOS 上的 Safari 浏览器仍然会看到只读处于活动状态。
以后必须可以再次将字段设置为只读,因此不能将其从 HTML 中删除。
有没有办法告诉 iOS 即使设置了 readonly 也始终显示键盘,或者这是错误的方法?也许通过 onFocus() 触发它通常是错误的?
javascript部分
function preCheckField(field,form){
if(field.readOnly){
// ses = "<?php echo $session['ukey']; ?>";
// res = getAccessRequest(field.id, form.id, ses);
// server side check before entry is skipped for this test
// assuming entry was allowed the readonly must be unset
field.readOnly = false;
dev_div = document.getElementById('dev_message');
message = (field.id+" can now be modified");
dev_div.innerHTML = dev_div.innerHTML+"<br>"+message;
field.focus();
}
}
html部分
<form action="#edit.1.product.label"
id="input.product.label"
method="post"
name="product.label"
class="form-style">
Label:<br>
<input id="1.product.label"
name="input"
type="text"
placeholder="label"
onFocus="preCheckField(this,this.form)"
readonly>
</form><br>
DEVELOPER OUTPUT:
<div id="dev_message">
</div>
解决方案
为了使 iOS Safari 注册更改的状态,在更改 readOnly 时,表单元素不应该已经具有焦点。
屏幕键盘现在将按预期显示。
function preCheckField(field, form) {
if (field.readOnly) {
field.blur(); // iOS needs this before a change of the readOnly
// ses = "<?php echo $session['ukey']; ?>';
// res = getAccessRequest(field.id, form.id, ses);
// server side check before entry is skipped for this test
// assuming entry was allowed by getAccessRequest readonly can be unset
field.readOnly = false;
dev_div = document.getElementById('dev_message');
message = (field.id + " can now be modified");
dev_div.innerHTML = dev_div.innerHTML + "<br>" + message;
field.focus();
}
}
推荐阅读
- optimization - 在 Amazon QLDB 中优化时间范围过滤器
- react-native - formik 在后台使用 formData 吗?
- c# - 当对象被序列化/反序列化时,委托/事件中的方法引用会做什么?
- javascript - 子元素未出现在网页中
- excel - VBA选择所有数据并根据列标题“名称”排序
- amazon-web-services - 如何使用 terraform 创建允许来自任何地方的 RDP 端口的 aws 安全组规则?
- php - PHP - 如何退出 if
- java - 如何提取部分录制的音频字节
- javascript - reduce() 返回值不能在 HTML 中显示在使用 map 函数的反应中
- c++ - 如何在一个 64 位整数中存储和使用两个 32 位带符号整数?