Выпадающее поле - первый элемент должен быть пустым - PullRequest
4 голосов
/ 23 ноября 2010

Использование sharepoint build в поисковом столбце и установка его в обязательное поле. SharePoint автоматически выбирает первый элемент в раскрывающемся списке (что вводит в заблуждение конечных пользователей).

Есть ли способ отобразить пустое или пустое значение для первой строки этого выпадающего списка?

(я открыт для любого решения. Я предпочитаю решение типа javascript)

Ответы [ 3 ]

4 голосов
/ 23 ноября 2010

Для полей выбора значение по умолчанию настраивается в настройках столбца.Если поле ввода «Значение по умолчанию» заполнено, удалите значение, чтобы не использовать значение по умолчанию.

Редактировать

Для полей поиска поле кажется измененнымрезко, если это требуется.Поля, которые НЕ являются обязательными, по умолчанию имеют значение (None).Однако переключение поля в обязательное приведет к удалению значения «(Нет)», и первое значение будет выбрано автоматически.

Одна вещь, которую я обнаружил, заключается в том, что если вы используете 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>
2 голосов
/ 02 декабря 2013

В ответе 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;
}
0 голосов
/ 17 марта 2016

Для улучшения ответа Ааронстера: AddValueToDropdown можно сделать следующим образом:

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;
}

Это необходимо для библиотек документов, где «добавить» и «задать свойства» - это две разные страницы.1005 * И funcValidate начинается с:

var funcValidate = function () {
    if (!injectedBlankValue)
        return true;

Все эти изменения направлены на то, чтобы все это работало с библиотеками документов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...