- objective-c - iOS 5 : Can you override UIAppearance customisations in specific classes?
- iphone - 如何将 CGFontRef 转换为 UIFont?
- ios - 以编程方式关闭标记的信息窗口 google maps iOS
- ios - Xcode 5 - 尝试验证存档时出现 "No application records were found"
我在下面准备了一个简单的片段,一个文本输入字段,一个按钮和一个选择。单击按钮以编程方式聚焦输入。更改选择也会关注输入。在所有桌面浏览器和 android 中都是这种情况,但在 iOS 中不是。在 iOS 中,焦点适用于按钮,但不适用于选择。
var mySelect = document.getElementById('mySelect');
var myButton = document.getElementById('myButton');
var myTextInput = document.getElementById('myTextInput');
mySelect.addEventListener('change', function(changeEvent) {
console.log('Change event trusted: ' + changeEvent.isTrusted);
myTextInput.focus();
});
myButton.addEventListener('click', function(clickEvent) {
console.log('Click event trusted: ' + clickEvent.isTrusted);
myTextInput.focus();
});
<select id="mySelect">
<option value="0">Option 1</option>
<option value="1">Option 2</option>
</select>
<button id="myButton">Focus through onclick</button>
<input id="myTextInput" type="text" />
iOS 似乎有一些 native 保护行为来阻止可写输入的编程焦点,以防止烦人的键盘弹出窗口。此保护措施仅拒绝在某些时候并非由真实用户交互发起的事件。
根据规范定义,用户发起的事件是可信事件: Spec entry
The isTrusted attribute must return the value it was initialized to. When an event is created the attribute must be initialized to false.
isTrusted is a convenience that indicates whether an event is dispatched by the user agent (as opposed to using dispatchEvent()). The sole legacy exception is click(), which causes the user agent to dispatch an event whose isTrusted attribute is initialized to false.
你可以看穿我的console.log
click
的声明和 change
事件有它们的 isTrusted
属性(property)true
,但后者无论如何都被 iOS 阻止了。
我搜索了很多,但未能找到描述此 iOS 行为是否有意的声明。
有人知道吗?是否有办法获得 <select>
的更改事件以成功聚焦输入并调出键盘?
我尝试了很多方法,主要使用 click
, mouseup
和 mousedown
在 select
上直接,但是男孩是那些在不同浏览器上不一致的事件......
总而言之,这是上面显示的相同代码段的 jsfiddle。 https://jsfiddle.net/qndg7sex/4/
注意它是如何包含“性”这个词的。
编辑
我试过引入一个假人 button
谁的click
将由 select
触发的 change
.在这个虚拟 button
的处理程序我试图 .focus
input
,但无济于事。
编辑 2
我决定将赏金奖励给 ConnorsFan。事实上,我们没有得到有关 iOS 行为的官方条目的更新,这让我更加相信,确实没有任何关于它的公开信息。我还将答案标记为已接受,因为我的方法与那里提出的解决方案非常相似。实际上并没有涉及 jQuery 插件,但它采用了一个自定义输入元素,该元素的行为无论如何都像一个选择。
最佳答案
您可能发现 Cordova project options 中有一个名为 keyboardDisplayRequiresUserAction
的标志.可以将其设置为 false
以解除对在 native iOS 应用程序中使用 focus()
的限制。然而,对于普通的 Web 应用程序,我还没有看到任何关于 iOS 浏览器中这些限制的官方文档。
在多次尝试使 focus()
与 iOS 中的 select
元素一起工作后,我发现唯一的解决方法是使用替换控件,例如 jQuery 的select2 ,如 this jsfiddle 中所示
。可以改进 CSS 属性,使其看起来更类似于 native 选择元素。
可以在列表项的 mouseup
事件处理程序中调用 myTextInput.focus()
,该处理程序已在第一次下拉列表时设置打开:
var firstOpen = true;
$(mySelect).select2({
minimumResultsForSearch: Infinity
}).on('change', function(e) {
console.log("change event was fired");
}).on('select2:open', function(e) {
if (firstOpen) {
firstOpen = false;
$('.select2-results ul').on('mouseup', function(e) {
myTextInput.focus();
});
}
});
关于javascript - 如何以编程方式在 iOS 中聚焦来自 select 标签的受信任 onchange 事件的文本输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44004230/
当我构建 2 个下拉菜单并从数据库中填充它们时,当从第一个下拉菜单中选取一个值时,会创建第二个下拉菜单。但是,当我在第二个选项中选择一个选项时,我的 ajax 正在执行。但是当我在第二个下拉列表中只有
所以我有一个用户脚本来解析页面并创建一个选择框并用选项填充它。 现在我想在用户更改选择框上的选定索引时调用脚本。不幸的是,用户脚本看起来只运行一次,并且无法读取选择上的 future 更改。 我试过:
我有一个文件选择器,当点击按钮时,文件选择器出现: 现在我想使用另一个按钮来执行此操作,触发上面的输入: { var element = document.getElementById('
有两种方法可以在 React 应用程序中获取输入更改。 一种是使用 另一个是 ... 什么时候应该使用第一个,什么时候应该使用另一个。 最佳答案 之所以有两种方式,是因为方式不止这两种。您
当子组件的 select 元素更改时,我尝试做两件事 - 更新子状态(用于显示更多字段以及其他特定于子项的决策等), 调用传入 props 的父处理程序。 只有第一个可以工作,如何添加第二个?正确的方
我创建了一个显示用户输入结果的自定义搜索应用程序。在应用程序中,我为用户提供了一种控制显示的结果数量的方法。 HTML 10 25 50 100 jQuery $(
我有一个带有多个选项的选择元素,如下所示: .. .... .. 我正在使用 django (不知道这是否真的很重要..)并且在 select 标记的 onChange 事件中我应
我有一个使用的 xsl 页面 在 onchange 事件中 onchange="updateDropdown({$pos});someElement_{$pos}.value = {$pos}";
我试图根据条件清除 onChange 事件中选择的值。它是否已经存在于选定的列表中。但是我无法使用 清除该值$select[name][0].selectize.clear(); 来自 onChang
我正忙于自学 FXML。我通过关注 this 来做到这一点示例。 这是一个简单的文本编辑器。但是,在本教程中,一切都是 Java 代码。 我自己正在使用 FXML 来分离逻辑 View 。 我目前
我在jsp页面中有如下代码... 如果我在 a4j 中使用 event="onchange" 它不会调用我的 generatePrescriptionQuantity 但如果我使用 event
我的页面上有一堆输入元素。每个输入元素都有一个 onchange 事件,该事件会触发对服务器的 ajax 调用。我想禁用所有这些 onchanges,然后对元素进行一些编程更改(重置它们),然后重新启
我有这个代码: $(document).ready(function(){ var country; $('#selectCountry').on('change', function (e)
我有这段代码: 但它并没有按照我想要的方式运行。当我离开盒子时它会运行该函数,我想每次该输入字段的内容发生变化时都执行该操作,我该怎么做? (我正在尝试为用户输入创建一个建议框)。 我也尝试过 jq
我有一个绑定(bind)到更改事件的选择,以便在进行选择时将用户带到新页面。鼠标没问题,但是当我尝试使用键盘的箭头键进行选择时,更改事件会在我按下箭头时立即触发,而不是等待我跳出,所以我只能选择第一个
所以我已经为此工作了大约一天......我有一个表单,其中有一个选择菜单,其选择会触发另一个相关的选择菜单。 此时我要做的是根据第二个选择菜单中的选择填写一个默认值。基本上,如果用户在 Labor 菜
我在 jQuery 中有一个 input text 我想知道是否可以获取该 input text 的值(type=number和 type=text) 在 onchange 发生之前,并且在 onch
简介我在 create-react-app 应用程序中有一个用户输入元素。它允许用户键入数字,或使用箭头向上或向下递增数字。然后输出显示该数字。 问题用户想要达到某个数字,无论他们如何输入数字,都会有
这个问题已经有答案了: val() doesn't trigger change() in jQuery (11 个回答) 已关闭 7 年前。 我有一个选择列表。 Toyota Subaru Fia
所以我的工作场所在一个组件内使用一个 SelectField,该组件在多个地方使用。说得通。现在,当我在当前正在开发的组件中使用该组件时。我创建的 onChange 事件未传递正确完成所需的值。现在,
我是一名优秀的程序员,十分优秀!