4

我想创建一个动态操作,当设置另一个项目(自动完成文本字段)的值时,它将为页面上的一个项目设置一个值。所以过程是这样的:

  1. 点击自动完成字段
  2. 输入一些字母
  3. 选择建议值之一

我找不到在选择建议值之一时将执行的事件。这样,一旦选择了建议的值,我就看不到如何读取自动完成字段的值。

The change event doesn't fit my needs, it doesn't execute when one suggested value is selected.

4

7 回答 7

4

我遇到了同样的问题,找到了这个链接:https ://community.oracle.com/thread/2130716?tstart=0并按如下方式修改了我的动态操作以获得所需的行为:

事件 =Custom

自定义事件 =result

从链接:

问题似乎是浏览器的默认行为。当您在自动完成中输入一些文本并显示列表时,焦点仍在文本字段中。此外,如果您使用键盘光标选择一个条目,焦点仍将位于文本字段中。这就是为什么文本字段的更改事件不会触发的原因。仅当您离开该领域时才会触发。

另一方面,如果您用鼠标选择一个条目,浏览器将暂时从文本字段中移除焦点(在 JavaScript 代码将焦点放回之前),因为您单击了字段外部。但这足以让浏览器触发更改事件。

我查看了底层 jQuery Autocomplete 小部件(http://bassistance.de/jquery-plugins/jquery-plugin-autocomplete/)的文档,实际上有一个名为“result”的事件,如果条目是从下拉列表中选择。

于 2014-08-15T04:07:56.307 回答
1

尝试“失去焦点”作为事件。当您离开自动完成字段时,它将触发您的动态操作,即您的 curosr 被移动到另一个字段。

于 2013-10-25T19:13:27.540 回答
1

这可能取决于您使用的 APEX 版本。

在 18.2 的情况下,由于底层组件基于 Oracle JET 的“inputSearch”组件,您需要使用以下配置来捕获具有自动完成功能的文本的选择更改事件:

事件: 自定义

自定义事件:ojupdate

参考: https ://docs.oracle.com/cd/E87657_01/jet/reference-jet/oj.ojInputSearch.html#event:optionChange

于 2018-12-24T08:50:41.707 回答
0

我打开了浏览器控制台,然后打开了 ApEx Developer 工具栏调试,发现相反,当用户用鼠标单击其中一个选项时,“更改”事件确实会触发。但是,如果用户使用键盘(键入几个字母以缩小列表范围,然后使用向下箭头键达到所需的值,然后按 Enter),则不会触发 Change 事件,就像您说的那样。

此外:即使您确实通过鼠标单击发起的 Change 事件发回了值,该值也不是自动完成的完整和有效值,而是用户键入的可能部分和错误大小写的值。即,更改事件的值提交先于自动完成的替换。

@VincentDeelen 给出的答案是我能看到的最好的选择,尽管它并没有完全给出“即时同步”的感觉。您也许可以使用“Key Down”事件,但要小心。您可能会获得大量的网络和数据库流量,因为每次击键(包括更正)都会导致再次触发动态操作。

测试环境:ApEx 4.2.3 和 Chrome 33 以及 IE 9。

ps 这对于 ApEx 开发团队来说可能也值得一提。

于 2014-04-25T21:52:03.650 回答
0

Oracle apex 19 现在在您创建名为“更新 [具有自动完成功能的文本字段]”的动态操作时添加了一个“组件事件” - 当您从列表中选择一个值时会触发此操作,但在您离开该字段时不会触发(类似于添加自定义事件“ojupdate”)。

于 2019-10-30T11:46:06.320 回答
0

杰弗里坎普是对的。您可以使用自定义事件结果通过动态操作进行设置。您还可以使用 document.getElementById("{id}").addEventListener("result", {function}); 在页面加载时注册它 或 $("#{id}").result( function( event, data, formatted ) { //something here });.

于 2015-08-25T14:16:23.380 回答
0

这不是很理想,但您可以使用 onfocus()。我认为,我正在寻找与您相同的自定义事件,该事件会在选择建议值时触发。我还没有找到它,这是我现在的解决方法。它将运行您最初为此创建的任何函数,没有任何值,但是一旦做出选择,它将返回焦点并使用正确的值再次运行该函数。就像我说的那样,并不理想,但它有效。

于 2015-08-24T22:08:33.830 回答