В
продолжении своих статей:
Сегодня я
раскажу:
1. Скрываем поля в
зависимости от значения поля Да/Нет
2. Собираем значение
текстового поля из других полей
Скрываем поля в
зависимости от значения поля Да/Нет
Допустим у нас есть поле «Установить ПО» типа Да/Нет, и нам
нужно в зависимости от его значения скрывать поле «Дополнительное ПО».
Так как по умолчанию поле «Установить ПО» имеет значение Нет, то при
загрузке формы поле «Дополнительное ПО» должно быть уже скрыто.
$(document).ready(function() { $('nobr:contains("Дополнительное ПО")').closest('tr').hide(); });
Далее нам нужно ждать, когда изменится значение поля «Установить
ПО»
_spBodyOnLoadFunctionNames.push("changePO"); function changePO() { $("input[title='Установить ПО']").change(function () { alert('test') }); }
Хорошо, следующий этап получать значение поля и в
зависимости от этого скрывать/открывать поле «Дополнительное ПО»
if($("input[title='Установить ПО']").prop('checked')) { $('nobr:contains("Дополнительное ПО")').closest('tr').show(); } else{ $('nobr:contains("Дополнительное ПО")').closest('tr').hide(); }
Отлично, получили чего хотели, но мне не понравилась работа
скрипта. Не хватало плавности и анимации. И тогда я решил добавить «эффектов»
$('nobr:contains("Дополнительное ПО")').closest('tr').show(100);
Но не получил нужный результат, т.к. поле «Дополнительное ПО»
имело тип Многострочный текст, то ото в себе содержит еще один большой блок td, который уже отображается и
плавности я не получил. Тогда я решил добавить скрытие, а потом отображение
внутреннего td
$('nobr:contains("Дополнительное
ПО")').closest('td').next('td').hide()
$('nobr:contains("Дополнительное
ПО")').closest('td').next('td').show(600)
Теперь все.
Весь код:
_spBodyOnLoadFunctionNames.push("changePO"); function changePO() { $("input[title='Установить ПО']").change(function () { if($("input[title='Установить ПО']").prop('checked')) { $('nobr:contains("Дополнительное ПО")').closest('tr').show(100); $('nobr:contains("Дополнительное ПО")').closest('td').next('td').hide() $('nobr:contains("Дополнительное ПО")').closest('td').next('td').show(600) } else{ $('nobr:contains("Дополнительное ПО")').closest('td').next('td').hide("slow") $('nobr:contains("Дополнительное ПО")').closest('tr').hide("fast"); } }); }
Полученный результат
Собираем значение
текстового поля из других полей
Разберем ситуацию, когда пользователь заполняет заявку на виртуальную
машину, и нужно построить название новой
виртуальной машины из значений нескольких полей : «Принадлежность к системе», «Назначение
машины» и «Номер машины». Из которых 2 поля меню (выбор) и одно число.
Алгоритм я реализовал следующий:
Добавляем код, который будет реагировать на изменение
каждого поля и в случае изменения запускается функция, которая получает
значение всех трех полей, строит строку и заполняет значение в нужное поле (Название)
Первое, сделаем «Название» не доступное для редактирования
$(document).ready(function() { $("input[title='Название']").attr("disabled", "disabled"); });
Далее функции реагирующие на изменение полей и функция
изменяющая название.
_spBodyOnLoadFunctionNames.push("changeSysMash"); function changeSysMash() { $("Select[title='Принадлежность к системе']").change(function () { setTitle(); }); } _spBodyOnLoadFunctionNames.push("changeTypeMash"); function changeTypeMash(){ $("Select[title='Назначение машины']").change(function () { setTitle(); }); } _spBodyOnLoadFunctionNames.push("changeNumMash"); function changeNumMash() { $("input[title='Номер машины']").change(function () { setTitle(); }); } function setTitle() { // меняем название элемента var sys = $("select[title='Принадлежность к системе'] option:selected").text(); var typeSys = $("select[title='Назначение машины'] option:selected").text(); var numMash = $("input[title='Номер машины']").val(); if (typeSys == 'Prod') { var nameMash = sys + '-' + numMash } else { var nameMash = sys + '-'+ typeSys + '-' + numMash } $("input[title='Название']").val(nameMash); }
В последней функции я предусмотрел проверку значения, если 'Назначение
машины' продуктивная, то значение поля не участвует в формировании названия.
Вот результат
P.S. единственным минусом работы на клиенте, это то что работаем
мы с displayname названиями полей и следовательно, нужно быть внимательными при
переименовании полей.
Обновление!!! 19.02.2015
Обновление!!! 19.02.2015
К полям можно обращаться по ID, а не по отображаемому имени и тем самым мы уходим от проблемы изменения отображаемого имени.
пример скрытия поля, где мы обращаемся по IntarnalName поля
пример скрытия поля, где мы обращаемся по IntarnalName поля
$("[id^='Title']").closest('tr').hide();
Релевантные ссылки:
Свойство полей readonly и disabled в формах NewForm и EditForm (jQuery + SharePoint 2013 Fields Part 1)
Представление списка, форматирование, статистика в названии веб части.(jQuery + SharePoint 2013 Fields Part 2)
Работа с полями элемента с помощью jQuery в EditForm (jQuery + SharePoint 2013 Fields Part 4)
Свойство полей readonly и disabled в формах NewForm и EditForm (jQuery + SharePoint 2013 Fields Part 1)
Представление списка, форматирование, статистика в названии веб части.(jQuery + SharePoint 2013 Fields Part 2)
Работа с полями элемента с помощью jQuery в EditForm (jQuery + SharePoint 2013 Fields Part 4)
Комментариев нет:
Отправить комментарий