无法禁用(设置为只读,保护,灰显等)字段

时间:2012-12-28 16:53:12

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

我已经运行了这段代码:

Xrm.Page.data.entity.attributes.get("subject").setValue("Beep");;
alert(Xrm.Page.ui.controls.get("subject").setDisabled);
Xrm.Page.ui.controls.get("subject").setDisabled(true);

正如预期的那样,我将文本 Beep 输入到字段中。正如预期的那样,警报告诉我该方法的内容(据我所知,他们正在做他们应该做的事情)。

但是,Control本身不会被禁用。我做错了什么?

我相信我看到了一个不同方法的示例( get setDisabled 之间的更多内容,但经过几个小时的谷歌搜索后,我我开始得出的结论是,我一定是很着迷或想到的。

2 个答案:

答案 0 :(得分:1)

我使用getControl函数,它工作正常。应采用以下形式:

Xrm.Page.getControl(controlId).setDisabled(disabled);

请记住,除非您将提交模式设置为“始终”,否则不会更新禁用的控件。

答案 1 :(得分:1)

您的代码是正确的,因此它应该正常工作。 @Daryl使用的语法是正确的。这两行是等价的。较短的只是语法糖缩短另一个。所以,你应该使用他的。

Xrm.Page.ui.controls.get("subject").setDisabled(true);
Xrm.Page.getControl("subject).setDisabled(true);

如果您正在提示并获取方法的内容,则表示您正在使用正确的组件和正确的方法。然而,所以说尽管这个电话,控制也不会被禁用。我认为你错了。

这就是我认为发生的事情。控件被禁用,然后,在您有时间注意它之前,表单会更新,从而导致禁用操作。

请记住与字段数据不同,被禁用的属性不会存储到数据库中。如果你将一个字段设计为受保护的,它就会保持这种状态。但是如果你从客户端的JavaScript代码设置这样的属性,那么外观只会持续到重新加载页面为止。

因此,如果您需要禁用字段,请从GUI设计器中进行设置,或者为您执行 onLoad 方法。