Here I will briefly show how you can react to <input/> field changes and modify the title of the detail view page.
I assume that you have already integrated AppGiniHelper Javascript Library into your project.
In an example project I have the following three fields:
- first_name
- middle_names
- last_name
The Detail View looks like this by default:

First I create a Javascript file for Detail View hooks. Because the table is called contacts, the javascript file must be called contacts-dv.js and must be located in the hooks directory.
I need a function for getting the current values of those three fields and for changing the detail view title. This function has to be called initially on page-load and additionally on every change of one of those fields. Here is the Javascript code, please see the comments:
// file: hooks/contacts-dv.js
// get a handle to detail view
var dv = AppGiniHelper.dv;
// this function will get the current values from UI
// and return a concatenated string like this:
// Hawking, Stephen William
function buildTitle() {
let ln = dv.getField("last_name").getValue();
let mns = dv.getField("middle_names").getValue();
let fn = dv.getField("first_name").getValue();
return (ln + ", " + fn + " " + mns).trim()
}
// this function will get the title based on current values
// and then update the detail view title
function updateTitle() {
let title = buildTitle();
dv.setTitle(title);
}
// on page-load, initially update the title
dv.ready(updateTitle);
// initialize change handler on all three fields
// on change of any of those fields, call the updateTitle() function
dv.getFields(["last_name", "middle_names", "first_name"]).onChange(updateTitle);
That's it, let's see the result:
Do you want some formatting?
There is another function: dv.setTitleHTML("")
Try this code instead and check the title after changing the name-parts:
// file: hooks/contacts-dv.js
var dv = AppGiniHelper.dv;
dv.getField("id").hide();
function buildTitle() {
let ln = dv.getField("last_name").getValue();
let mns = dv.getField("middle_names").getValue();
let fn = dv.getField("first_name").getValue();
let parts = new Array();
if (ln.length) parts.push(`<b>${ln}</b>`);
if (fn.length )
{
if (mns.length)
parts.push(`<u>${fn}</u> ${mns}`);
else
parts.push(fn);
}
return parts.join(", ");
}
function updateTitle() {
let title = buildTitle();
dv.setTitleHTML(title);
}
dv.ready(updateTitle);
dv.getFields(["last_name", "middle_names", "first_name"]).onChange(updateTitle);

