在 Power Apps 中,如何使文本输入控件仅在用户完成键入且控件失去焦点时才执行操作(例如搜索)?我已经为文本输入控件的 TriggerOutput 属性选择了“FocusOut”。根据微软的文档,TriggerOutput 有三个选项:
FocusOut: 仅当文本输入控件失去焦点时触发 OnChange。这是默认选项。
Delayed: 延迟半秒后触发 OnChange。对于延迟昂贵的操作直到用户完成输入文本很有用。
按键: 当用户键入时立即触发 OnChange。
根据我的理解,“FocusOut”应该是我想要的行为。但是,即使选择“FocusOut”后,仍会在输入每个字符时执行搜索(类似于“按键”行为),这会显着影响性能。
考虑以下示例:有一个文本输入控件(inputEmail)和一个标签(resultName)控件。在文本输入中输入用户的电子邮件地址后,标签会显示用户的姓名。
这是我的设置。
resultName.text = Office365Users.UserProfileV2(inputEmail.Value).displayName
问题是,每次我在文本框中输入一个字母时,它都会抛出以下错误,说找不到它(那是因为我还没有输入完整的电子邮件地址。),直到我输入正确的电子邮件地址。
Office365Users.UserProfileV2失败:{“错误”:{“代码”:“ResourceNotFound”,“消息”:“找不到用户”,“innerError”:xxxxxxxx}}
以下设置也会导致同样的问题: 将 inputEmail 的 OnChange 属性设置为
UpdateContext({resultName:Office365Users.UserProfileV2(inputEmail.Value).displayName})
然后设置Label的Text属性
Text = resultName
如何才能使搜索仅在我输入完整地址/将焦点从文本框移开时才开始?
我无法解释为什么你的方法不起作用,但这对我来说很有效,可以让搜索仅在用户退出焦点后执行。与您的方式不同,我使用附加到 onChange
属性的变量,然后修改显示。我非常确定这会延迟您的搜索,直到对象退出,这样应该会提高您的性能。步骤
TextBox
将 onChange 属性设置为如下所示:
Set(searchTerm, TextSearchBox1.Text)
对于您要搜索的任何内容(大概是画廊?),您可以将其 Items
公式更新为:
SortByColumns(
Filter(
[@zzzyourDataSourcezzz],
searchTerm in zzYourColumnName
),
"zzzString Of Search column",
If(SortDescending1, SortOrder.Descending, SortOrder.Ascending)
)
另一个建议,如果这不起作用,你可以使用一个好的旧按钮......