在查阅列中使用sharepoint build并将其设置为必填字段。 SharePoint自动选择下拉框中的第一项(对最终用户有误导性)。
有没有办法在此下拉框的第一行显示空白或空?
(我对任何解决方案持开放态度。我更喜欢javascript类型解决方案)
答案 0 :(得分:4)
对于“选择”字段,将在列设置中配置默认值。如果填充了“默认值”输入框,请删除该值以使用无默认值。
修改强>
对于“查找”字段,如果需要,该字段似乎会发生显着变化。默认情况下,不需要的字段具有“(无)”值。但是,将字段切换为必需将删除“(无)”值,并自动选择第一个值。
我发现的一件事是,如果您使用JavaScript将空值添加到下拉列表然后尝试按OK,则会出现错误页面:“发生了意外错误。”作为一种解决方法,我编写了一些代码来快速验证字段在提交表单之前是否有值。如果该字段没有值,则它将提示用户并取消提交。 (注意:此代码仅附加到“确定”按钮,因此您在编辑EditForm.aspx时可能会出错。只需为查找字段选择一个值,您就可以像平常一样进行编辑)
无论如何,在代码上...我认为您需要更改的唯一一行是var fieldTitle = 'Large Lookup Field';
,以将其更新为您的字段名称。
<script type="text/javascript">
function GetDropdownByTitle(title) {
var dropdowns = document.getElementsByTagName('select');
for (var i = 0; i < dropdowns.length; i++) {
if (dropdowns[i].title === title) {
return dropdowns[i];
}
}
return null;
}
function GetOKButtons() {
var inputs = document.getElementsByTagName('input');
var len = inputs.length;
var okButtons = [];
for (var i = 0; i < len; i++) {
if (inputs[i].type && inputs[i].type.toLowerCase() === 'button' &&
inputs[i].id && inputs[i].id.indexOf('diidIOSaveItem') >= 0) {
okButtons.push(inputs[i]);
}
}
return okButtons;
}
function AddValueToDropdown(oDropdown, text, value, optionnumber){
var options = oDropdown.options;
var option = document.createElement('OPTION');
option.appendChild(document.createTextNode(text));
option.setAttribute('value',value);
if (typeof(optionnumber) == 'number' && options[optionnumber]) {
oDropdown.insertBefore(option,options[optionnumber]);
}
else {
oDropdown.appendChild(option);
}
oDropdown.options.selectedIndex = 0;
}
function WrapClickEvent(element, newFunction) {
var clickFunc = element.onclick;
element.onclick = function(event){
if (newFunction()) {
clickFunc();
}
};
}
function MyCustomExecuteFunction() {
// find the dropdown
var fieldTitle = 'Large Lookup Field';
var dropdown = GetDropdownByTitle(fieldTitle);
if (null === dropdown) {
alert('Unable to get dropdown');
return;
}
AddValueToDropdown(dropdown, '', '', 0);
// add a custom validate function to the page
var funcValidate = function() {
if (0 === dropdown.selectedIndex) {
alert("Please choose a value for " + fieldTitle + ".");
// require a selection other than the first item (our blank value)
return false;
}
return true;
};
var okButtons = GetOKButtons();
for (var b = 0; b < okButtons.length; b++) {
WrapClickEvent(okButtons[b], funcValidate);
}
}
_spBodyOnLoadFunctionNames.push("MyCustomExecuteFunction");
</script>
答案 1 :(得分:2)
作为回应Kit Menke,我对代码进行了一些更改,因此它将保留下拉列表的先前值。我已将以下代码行添加到AddValueToDropdown()....
function AddValueToDropdown(oDropdown, text, value, optionnumber){
var selectedIndex
if (oDropdown.options.selectedIndex)
selectedIndex = oDropdown.options.selectedIndex;
else
selectedIndex = -1;
// original code goes here
// changed last line of code (added "selectedIndex+1")
oDropdown.options.selectedIndex = selectedIndex+1;
}
答案 2 :(得分:0)
要改进Aaronster的回答:var injectedBlankValue = false;
function AddValueToDropdown(oDropdown, text, value, optionnumber) {
for (i = 0; i < oDropdown.options.length; i++) {
option = oDropdown.options[i];
if(option.getAttribute('selected')) // If one is already explicitely selected: we skip the whole process
return;
}
var options = oDropdown.options;
var option = document.createElement('OPTION');
option.appendChild(document.createTextNode(text));
option.setAttribute('value', value);
if (typeof (optionnumber) == 'number' && options[optionnumber]) {
oDropdown.insertBefore(option, options[optionnumber]);
}
else {
oDropdown.appendChild(option);
}
// changed last line of code (added 'selectedIndex+1')
oDropdown.options.selectedIndex = 0;
injectedBlankValue = true;
}
可以这样做:
funcValidate
这对于文档库是必需的,其中“add”和“set properties”是两个不同的页面
var funcValidate = function () {
if (!injectedBlankValue)
return true;
以:
{{1}}
所有这些变化都是为了使整个过程与文档库一起使用。