Skip to content

Instantly share code, notes, and snippets.

@koohq
Last active January 8, 2018 18:05
Show Gist options
  • Save koohq/91c223dbf52fe5a626807b0f4129a74d to your computer and use it in GitHub Desktop.
Save koohq/91c223dbf52fe5a626807b0f4129a74d to your computer and use it in GitHub Desktop.
Assign ID for the field row on SharePoint NewForm/EditForm/DispForm pages (jQuery required)
/**
* sp-assignfieldrowid.js
*
* (c) 2018 koohq. Licensed under CC0.
* https://creativecommons.org/publicdomain/zero/1.0/legalcode
*/
// Promise that indicates assigning ID completed
var formFieldRowIdAssigned;
(function assignFieldRowIdIfSatisfied() {
var fileName = location.pathname.split('/').pop().toLowerCase();
switch (fileName) {
case 'newform.aspx':
case 'editform.aspx':
assignFieldRowIdAtEntryForm();
break;
case 'dispform.aspx':
assignFieldRowIdAtViewForm();
break;
default:
break;
}
function assignFieldRowIdAtEntryForm() {
assignFieldRowId('[id*="$"]:first', function resolveBy($element) {
var fieldId = $element.prop('id');
// FieldName_GUID_$FieldOrControlType
var fieldIdRegex = /^(.*)_[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}_\$.*$/;
var fieldNameMatch = fieldId.match(fieldIdRegex);
return fieldNameMatch === null ? '' : fieldNameMatch[1];
});
}
function assignFieldRowIdAtViewForm() {
assignFieldRowId('a[name^="SPBookmark_"]', function resolveByBookmark($element) {
var bookmarkName = $element.prop('name');
// SPBookmark_FieldName
var bookmarkNameRegex = /^SPBookmark_(.*)$/;
var bookmarkNameMatch = bookmarkName.match(bookmarkNameRegex);
return bookmarkNameMatch === null ? '' : bookmarkNameMatch[1];
});
}
function assignFieldRowId(selector, resolver) {
formFieldRowIdAssigned = new Promise(function(resolve, reject) {
ExecuteOrDelayUntilBodyLoaded(function() {
try {
$('.ms-formtable > tbody > tr').find(selector).each(function(index, element) {
var $element = $(element);
var fieldName = resolver($element);
if (fieldName === '') { return; }
var $fieldRow = $element.closest('tr');
if ($fieldRow.prop('id') !== '') { return; }
// idFieldNameRow
var fieldRowId = String.format('id{0}Row', fieldName);
$fieldRow.prop('id', fieldRowId);
});
resolve();
} catch (e) {
reject();
}
});
});
}
})();
/**
* sp-assignfieldrowid.usage.js
*
* (c) 2018 koohq. Licensed under CC0.
* https://creativecommons.org/publicdomain/zero/1.0/legalcode
*/
// dummy
var $titleRow;
/** DispFrom **/
// before
$(function() {
$titleRow = $('.ms-formlabel').find('a[name$="Title"]').closest('tr');
});
// after
formFieldRowIdAssigned.then(function() {
$titleRow = $('#idTitleRow');
});
/** NewForm/EditFrom **/
// before
$(function() {
$titleRow = $('.ms-formbody').find('[id^="Title"]').closest('tr');
});
// after
formFieldRowIdAssigned.then(function() {
$titleRow = $('#idTitleRow');
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment