【问题标题】:How can I know what form control had focus when ribbon button pressed?当按下功能区按钮时,我如何知道哪个表单控件具有焦点?
【发布时间】:2012-11-06 06:38:43
【问题描述】:

有一个自定义 JS 函数,当在表单上下文中按下功能区按钮时调用该函数。在我的自定义 JS 函数中,我需要知道在按下功能区按钮之前哪个表单字段具有焦点。我尝试了两种方法(如下)但没有成功。有没有办法可靠地做到这一点?

方式#1

根据this,我可以得到我想作为参数传递给我的JS的控件。我试过同时使用PrimaryControlIdPrimaryControl 参数。

<JavaScriptFunction FunctionName="OnCustomBtnFunc" 
                    Library="$webresource:myJSfile.js">
   <CrmParameter Value="PrimaryControlId" />
   <CrmParameter Value="PrimaryControl" />
</JavaScriptFunction>

对于这两种方法,我都将一个对象传递给 OnCustomBtnFunc(),但它似乎无法让我确定在按下功能区按钮之前哪个表单控件具有焦点。

方式#2

我打电话给Xrm.Page.ui.getCurrentControl()。这适用于某些类型的表单字段,但不适用于其他类型,例如如果它是一个字符串字段,它可以工作,但我得到 null 进行查找。

【问题讨论】:

  • 是否可以将onstatuschanged 或其他名称连接到每个字段,这样当您的用户单击功能区时,前一个字段会失去焦点并触发事件?然后,您可以存储该元素的 id。没试过——只是推测。
  • @Konrad 试过了。问题是按下功能区按钮时未调用“onchange”事件(假设这是您的意思,因为它是表单字段的唯一 OOTB 事件)!焦点停留在该领域。我可以将焦点更改为任意字段,以便触发当前字段的 onchange 事件。那么问题是如果字段验证检测到无效值,我希望功能区按钮代码知道发生了这种情况。我可以尝试设置标志等,但这一切都很笨拙!
  • 对不起,哥们——我只有这些了。如果你已经试过了,我对你就没有用了。也许您可以在验证错误或类似的情况下注册控件的 id。一定要告诉你你是怎么做的,因为下个月我将自己做一些 GUI 工作,可能会为同样的问题哭泣。另外,为了清楚起见 - 您将在 JavaScript 中对其进行编码 => 它 很笨拙。 :)
  • @Konrad 哈哈,好的。如果我遇到任何有用的东西会更新
  • @KonradViltersten 对延迟回复表示歉意。已经转移到其他工作。没有找到我需要的受支持的解决方案,但能够使其与一些 JS kludge 一起工作。

标签: dynamics-crm-2011 dynamics-crm-online


【解决方案1】:

您不会喜欢这个答案,但您可以使用 JQuery 快速抓取表单中的每个控件并为其分配一个 OnBlur 事件。此事件可以将 ID 或控件本身分配给全局变量,您可以让您的功能区(从不同的范围触发)访问该变量。

人们不喜欢这种方法,因为变量的上下文范围不同,并且因为它涉及使用纯 HTML 的“不支持”特性。但是,如果您只问“如何”而不是“我们应该”,那么这是“如何”做到这一点的简单方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多