четверг, 30 октября 2014 г.

Свойство полей readonly и disabled в формах NewForm и EditForm (jQuery + SharePoint 2013 Fields Part 1)

Думаю многие хотели изменить свойства полей с помощью javascript, это не сложно делается, и в интернете много разных решений. Но вот я так и не нашел способа которым можно запретить редактирование поля Многострочный текст (multiline text field)

В начале я попробовал использовать код

$("input[title='Отображаемое имя']").attr("disabled", "disabled");

Но это не работало, и я решил посмотреть, как устроено поле



На скриншоте видно, что данные находятся во втором уровне <div>

Тогда я решил использовать
$('nobr:contains("Дополнительное ПО")').closest('td').next('td').find('div') .find('div').attr("disabled", "disabled");

Это помогло, и я уже подумал что задача решена. И действительно, в Internet Explorer, данные в поле внести не получалось. Но когда я попробовал Chrome, то в поле можно было внести данные.
Тогда я удалил один <div> и возможность редактирования пропала

Тогда я решил дальше смотреть, и нашел такое свойство contenteditable. При изменении его на false я добился желаемого результата.


Вот пример javascript :

$('nobr:contains("Дополнительное ПО")').closest('td').next('td').find('div').attr("contenteditable","false");

Решил еще написать полезный скрипт для других видов полей
Однострочный текст (Text):

$("input[title='Название']").attr("readonly","true");



$("input[title='Этап работы']").attr("disabled", "disabled");
Выбор (Choice)
$("input[title='Принадлежность к системе']").attr("disabled", "disabled");
Да/нет (Boolean)
$("input[Title='Установить ПО']").attr("disabled", "disabled");

Число (Number)
$("input[title='Объем памяти']").attr("disabled", "disabled");

Обновление!!! 19.02.2015

К полям можно обращаться по ID, а не по отображаемому имени и тем самым мы уходим от проблемы изменения отображаемого имени.
пример скрытия поля, где мы обращаемся по IntarnalName поля

$("[id^='Title']").closest('tr').hide();

$("[id^='Title']").attr("disabled", "disabled");

Обновление 12.11.2015
Пользователь или группа (peoplepicker)

jQuery("[id^=' field id ']").attr("disabled", "disabled");
jQuery("[id^=' field id '] a.sp-peoplepicker-delImage").hide(); // скрывает иконку удаления выбранного пользователя