Volomeister Posted June 28, 2022 Report Share Posted June 28, 2022 Hi there! I needed to find a way to highlight text that was entered in the text input, but was not able to find a ready made solution. With a bit of research and coding here is a solution that I came up with: <script> const HTMLTextInputIDs = ['cbParamVirtual1', 'InsertRecordNumber_Field_2'] const highlightedTextBackground = 'yellow'; const generateMimicInputTemplate = (inputId) => { return `<div contenteditable="true" class="mimic-text-input cbFormTextField" related-input="${inputId}"></div>`; } const addMimicInput = (HTMLInputElelement, HTMLMimicInputMarkup) => { HTMLInputElelement.insertAdjacentHTML('afterend', HTMLMimicInputMarkup); } const addMimicInputStyles = () => { document.querySelector('head').insertAdjacentHTML('beforeend', `<style> .mimic-text-input { -webkit-appearance: textfield; -moz-appearance: textfield; appearance: textfield; white-space: nowrap; color: transparent; } .mimic-text-input:first-line { background-color: ${highlightedTextBackground}; } <style>`) } const syncInputWithMimic = (HTMLInputElelement, HTMLMimicInput) => { HTMLMimicInput.addEventListener('input', (e)=>{ HTMLInputElelement.value = HTMLMimicInput.innerText; }) } const syncMimicWithForm = (HTMLFormElement, HTMLMimicInput) => { HTMLMimicInput.addEventListener('keydown', (e)=>{ if(e.keyCode == 13) { console.log('enter fired') e.preventDefault(); HTMLFormElement.submit(); }}) } const main = () => { const HTMLcaspioForm = document.querySelector('#caspioform'); HTMLTextInputIDs.forEach(textInputID => { const HTMLtextInput = document.querySelector(`#${textInputID}`); HTMLtextInput.style.display = 'none'; addMimicInput(HTMLtextInput, generateMimicInputTemplate(textInputID)); const HTMLMimicElement = document.querySelector(`[related-input="${textInputID}"]`); syncInputWithMimic(HTMLtextInput, HTMLMimicElement); syncMimicWithForm(HTMLcaspioForm, HTMLMimicElement); }) addMimicInputStyles(); } document.addEventListener('DataPageReady', main) </script> Hope this helps. You can use it as it is. Just add this code to the header/footer of your form DataPage. The only thing you need to change is to add your IDs of your text inputs where you need this function to be added. These IDs are store in HTMLTextInputIDs array: const HTMLTextInputIDs = ['cbParamVirtual1', 'InsertRecordNumber_Field_2'] By analogy, you can add here coma separated IDs of your inputs. Also, cou can change the background color of the text in highlightedTextBackground variable. The end result will look like in the screenshot attached. Hope some will find this useful. Quote Link to comment Share on other sites More sharing options...
Kurumi Posted November 25, 2022 Report Share Posted November 25, 2022 Hi! Just an update - if you would like to highlight search words in the Results Page, you can try these solutions: 1. From this link: https://www.delftstack.com/howto/javascript/highlight-text-using-javascript/ To apply in the DataPage, insert the code below in the Footer of Configure Results Page Fields <script> document.addEventListener('DataPageReady', function (event) { let searched = document.querySelector("input[name='Value1_1']").value.trim(); if (searched !== "") { let text = document.querySelector("table[id*='cbTable']").innerHTML; let re = new RegExp(searched,"g"); // search for all instances let newText = text.replace(re, `<mark>${searched}</mark>`); document.querySelector("table[id*='cbTable']").innerHTML = newText; } }); </script> You can change the Value1_1 based on the form element of your search field. 2. Using mark.js - https://markjs.io/ This is text highlighter written in JavaScript. To apply in the DataPage, insert the code below in the Footer of Configure Results Page Fields <script src="https://cdnjs.cloudflare.com/ajax/libs/mark.js/8.11.1/mark.min.js"></script> <script> document.addEventListener('DataPageReady', function (event) { let searched = document.querySelector("input[name='Value1_1']").value; if (searched !== "") { var instance = new Mark(document.querySelector("table[id*='cbTable']").tBodies[0]); instance.mark(searched); } }); </script> Result: I hope this helps! Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.