我认为您在这里有两个问题,尽管它们可能是由同一件事引起的。不幸的是,这不是对这些问题的回答,而是试图澄清上述问题。
问题 1:当输入一个空值时,JavaScript 会读取前一个值。
我认为这与这篇文章的原始问题相同。
这也发布在:http://partnersupport.microsoft.com/en-us/mpndynamics/forum/mpndyncrm/javascript-reads-previous-value-when-an-empty/f7b8dffd-3a21-48ae-8dca-4c5467ea8272
在参赛者表格上。
在名称字段中输入“Oliver”。
然后用 JavaScript 读取如下。
function ClickHandler()
{
var nameValue = "";
nameValue = locationValue = parent.Xrm.Page.getAttribute("name").getValue();
var test1 = "";
}
您应该会按预期获得“Oliver”。
然后回到竞争者表格,用退格键手动删除文本。
现在像之前一样使用 JavaScript 读取名称字段中的内容。
你会期望什么都得不到,但你会得到“奥利弗”。
现在在名称字段中输入 Mark。
使用 JavaScript 阅读该字段,您会得到应有的“标记”。
因此,似乎当在前一个值之后输入一个空值时,JavaScript 会读取前一个值。
换一种说法。如果 Name 字段有一个值并且文本随后被手动删除,则似乎存在问题。 Xrm.Page 对象不会更新为空字符串。但是,Xrm.Page 对象将更新为非空值。
问题 2:如果字段没有失去焦点,Javascript 无法读取文本字段中的值。
这也发布在http://partnersupport.microsoft.com/en-us/mpndynamics/forum/mpndyncrm/javascript-cannot-read-the-value-in-the-text-field/ecc2c9e0-fba0-44f2-93cd-320d042896f0?tm=1389885238744
如果字段没有失去焦点,Javascript 无法读取文本字段中的值。
在“定期约会”表单上,我有一个运行 Javascript 的 IFRAME。当按下按钮时,它会读取位置字段中的值。如果我将位置字段中的值更改为“Brunswick Street”并按下按钮,我什么也读不到(即在下面的代码中 locationValue 为空)。
但是,如果我将位置字段中的值更改为“Brunswick Street”。然后,我单击离开到 IFRAME 以外的表单上的某个位置,因此位置字段失去了焦点(这也可以通过在位置字段中输入文本后按 enter/tab 来实现)。如果我然后按下 IFRAME 上的按钮,Javascript 将正确读取位置字段中的文本。
我认为这是因为 parent.Xrm.Page 仅在字段中失去焦点时才会更新。
function ClickHandler()
{
var locationValue = parent.Xrm.Page.getAttribute("location").getValue();
}
我尝试通过将 JavaScript 中的焦点设置为 requiredattendees 字段来更改焦点。但这不起作用。
parent.Xrm.Page.getControl("requiredattendees").setFocus();
我曾经使用 parent.document.forms[0].namedItem(srcDataFlds[fld]).value;获取 CRM 4 和 2011 中的值,但这在 CRM 2013 中不起作用。因此,正如 SDK 建议的那样,我将代码更改为使用 parent.Xrm.Page 但是它似乎给出了上述问题。
问题是为什么当我点击 IFRAME 上的按钮时焦点没有丢失?如果我单击表单中的任何字段,焦点会发生变化,那么为什么不是 IFRAME。
另外,如何让 JavaScript 读取位置字段中的值,而无需单击位置字段。 (希望以受支持的方式读取值)?
我只希望用户能够在位置字段中输入值并单击 IFRAME 中的按钮。
我还注意到,当您单击 IFRAME 时,不会为位置字段触发 On Change 事件。
到目前为止,唯一的方法是在单击触发 Javascript 的按钮之前单击另一个字段(或按 enter/tab)。
这两个问题都已被 Microsoft 识别并已在“Microsoft Dynamics CRM 2013 Service Pack 1 的更新汇总 1”中修复