下拉字段 - 第一项应为空白

时间:2010-11-23 15:17:12

标签: sharepoint drop-down-menu

在查阅列中使用sharepoint build并将其设置为必填字段。 SharePoint自动选择下拉框中的第一项(对最终用户有误导性)。

有没有办法在此下拉框的第一行显示空白或空?

(我对任何解决方案持开放态度。我更喜欢javascript类型解决方案)

3 个答案:

答案 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}}

所有这些变化都是为了使整个过程与文档库一起使用。