原始问题:
我正在尝试创建一些 JavaScript 以添加到 Microsoft Dynamics CRM 中的表单。
我有以下脚本,已将其分配给表单 onLoad
事件:
$(document).ready(function () {
if ($('#CheckBox1').is(':checked')) {
$('<div id="div2">Some Data Here</div>').insertAfter("#Div1");
$('#divHeader').height('+=25px');
var newtop = $('#divMain').position().top + 25;
$('#divMain').css('top', newtop + 'px');
}
});
以下是 HTML 表单的精简版本
<div id="divHeader">
<div id="Div1"></div>
</div>
<div id="divMain"></div>
当表单加载时,应该发生的是这样的:
<div id="divHeader">
<div id="Div1"></div>
<div id="Div2">Some Data Here</div>
</div>
<div id="divMain"></div>
这确实发生了。但是,问题是 divHeader
和 divMain
不会调整大小,因此除非用户向下滚动,否则无法看到新添加的 Div2
在 divHeader
内。
如果我添加警报:
$(document).ready(function () {
if ($('#CheckBox1').is(':checked')) {
alert("Random alert");
$('<div id="div2">Some Data Here</div>').insertAfter("#Div1");
$('#divHeader').height('+=25px');
var newtop = $('#divMain').position().top + 25;
$('#divMain').css('top', newtop + 'px');
}
});
整个事情运作得很完美。如何在没有警报的情况下使其正常工作?
<小时/>更新1:
setTimeout
也可以代替使用 alert
。
$(document).ready(function () {
setTimeout(function () {
if ($('#CheckBox1').is(':checked')) {
$('<div id="div2">Some Data Here</div>').insertAfter("#Div1");
$('#divHeader').height('+=25px');
var newtop = $('#divMain').position().top + 25;
$('#divMain').css('top', newtop + 'px');
}
}, 5000);
});
所以看来 $(document).ready
似乎没有正确完成它的工作。在 alert
或 setTimeout
两种情况下,表单都会在调整 div 标签大小之前获得额外的时间来完成加载。
最佳答案
完全不支持在 Dynamics CRM 中执行 DOM 操作。请参阅Do Not Access the DOM .
您将需要使用受支持的表单操作方法(即 Xrm.Page
)。虽然无法在 CRM 表单上动态添加/删除内容,但您可以显示和隐藏元素。据我了解,如果表单上的 bool 字段(显示为复选框)为真,您将尝试显示一些内容。
这可以通过将您想要显示/隐藏的控件添加到表单来完成(该控件可以是标准 CRM 字段之一,也可以是自定义 Web 资源,具体取决于您的要求)。然后,您可以编写一些 JavaScript 来在 bool 属性更改其值时显示/隐藏相关控件:
function onload() {
Xrm.Page.getAttribute("booleanField").addOnChange(showMoreStuffInHeader);
showMoreStuffInHeader();
}
function showMoreStuffInHeader() {
var visible = Xrm.Page.getAttribute("booleanField").getValue();
Xrm.Page.getControl("someDataHereControl").setVisible(visible);
}
关于javascript - Dynamics CRM 表单的客户规模操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50854213/