我正在尝试在初始加载编辑表单期间使用JavaScript捕获SharePoint表单的所有字段。不知何故,只有前两个多行字段被正确捕获。当我改变字段的顺序时,这是有效的。例如: 领域1 领域2 第3场
字段1& 2被捕获。
如果我更改它们出现的顺序: 领域2 领域3 第1场
字段2& 3被捕获。
这似乎不受代码本身的影响,而是与在SharePoint中加载有关。但无论如何这里是代码:
$(window).load(function()
{
if(document.readyState === 'complete')
{
getFields();
getValues();
var myStatement = $("textarea[Title='Problem Statement']").closest("span").find("iframe[Title='Rich Text Editor']").contents().text();
var myScope = $("textarea[Title='Scope']").closest("span").find("iframe[Title='Rich Text Editor']").contents().text();
}
});
我也在使用SPUtility来捕获价值,并且很难获得其他地方的支持。
SPUtility代码:
scope = SPUtility.GetSPField('Scope');
scopeVal = scope.GetValue();
在window.load期间,上述代码中的getFields()和getValues()中的上述代码都捕获了所有字段。
感谢任何帮助或建议。
答案 0 :(得分:0)
每个字段都嵌入在包含以下HTML注释的<td>
中:
<!-- FieldName="Field1"
FieldInternalName="Field1"
FieldType="SPFieldNote"
-->
虽然您无法显式查询DOM以获取此注释,但您可以查询以获取表单上的所有字段,然后循环遍历它们,检查其innerHTML属性以查看它们是否包含所需的注释字符串。
通过这种方式,您可以确定任何所需字段的确切父<td>
元素。这使您比使用jQuery的.closest()
函数更精确。
要记住的另一件事是增强的富文本,富文本和纯文本多行字段每个都以不同的方式呈现,因此需要不同的查询选择器参数来获取它们的值。
以下示例代码获取内部名称为Field1,Field2或Field3的多行字段的值,并将值存储在对象中。
var richTextFieldNames = ["Field1","Field2","Field3"];
var richTextFieldValues = {};
var fieldRows = document.querySelectorAll(".ms-formtable td.ms-formbody");
for(var i = 0, len = richTextFieldNames.length; i<len; i++){
currentFieldName = richTextFieldNames[i];
for(var j = 0, jlen = fieldRows.length; j<jlen; j++){
var currentRow = fieldRows[j];
if(currentRow.innerHTML.indexOf("FieldInternalName=\""+currentFieldName+"\"") > -1){
var element = currentRow.querySelector(".ms-rtestate-field[role=\"textbox\"]"); // enhanced rich text
if(!element){
var iframe = currentRow.querySelector("iframe[title=\"Rich Text Editor\"]");
if(iframe){
element = iframe.contentDocument.querySelector("body"); // rich text
}else{
element = currentRow.querySelector("textarea"); // plain text
}
}
richTextFieldValues[currentFieldName] = element.innerText ? element.innerText : element.textContent;
break;
}
}
}
然后可以使用数组或点表示法将值作为richTextFieldValues
对象的属性进行访问,例如: var myScope = richTextFieldValues["Scope"];
或richTextFieldValues.Scope;
(假设Scope是多行字段的内部名称)。