我运行了这段代码:
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 输入到字段中。正如预期的那样,警报告诉我该方法的内容(据我所知,他们正在做他们应该做的事情)。
但是,控件本身不会被禁用。我做错了什么?
我相信我看到了一个不同方法的示例(get和setDisabled之间有更多的东西,但经过几个小时的谷歌搜索后,我我开始得出结论,我一定是出现了幻觉或痴心妄想。
最佳答案
您的代码是正确的,所以它应该可以工作。 @Daryl 使用的语法是正确的。这两行是等价的。较短的一个只是缩短另一个的语法糖。所以,你应该使用他的。
Xrm.Page.ui.controls.get("subject").setDisabled(true);
Xrm.Page.getControl("subject).setDisabled(true);
如果您发出警报并获取该方法的内容,则意味着您正在使用正确的组件和正确的方法。然而,可以说尽管有调用,但控件不会被禁用。我认为你错了。
这就是我认为会发生的事情。控件被禁用,然后,在您有时间注意到它之前,表单被更新,渲染掉您的禁用操作。
请记住,与字段数据不同,禁用的属性不会存储到数据库中。如果您将一个字段设计为 protected ,它就会保持这种状态。但是,如果您在客户端的 JavaScript 代码中设置这样的属性,则外观只会持续到执行页面重新加载为止。
因此,如果您需要禁用这些字段,请通过 GUI 设计器将其禁用,或者触发一个 onLoad 方法来为您执行此操作。
关于javascript - 无法禁用(设置为只读、保护、灰显等)字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14072900/