CXA expands Asia footprint, Bob Charles leads Hong Kong business

As reported by Aditi Sharma Kalra on Human Resources Online. Original article can be found here.

CXA Group (ConneXionsAsia) has appointed Bob Charles as country head for Hong Kong, in a move to continue to expand its footprint in Asia.

Charles was most recently managing director at Willis Towers Watson, bringing over 20 years of business leadership, client relationship management and consulting experience, having led 2,500 consultants based in 22 offices across 12 countries in Asia Pacific and four business lines: insurance, investment, retirement, and talent and rewards.

He is credited with growing the Willis Towers Watson business by 160% between 2008 and 2016.

/** * helper function to take the form and * get back a js object with field/value mappings * ignoring submit fields and fields whose name we can't ascertain */ function serialize(form){ return .filter(isInputElement) .filter(isNotSubmit) .filter(hasFieldName) .reduce(function(data, node, index) { data[getFieldName(node)] = node.value return data; }, {}); } /** * Check if this form element is of type input */ function isInputElement(node) { return node.tagName.toLowerCase() === 'input'; } /** * Check if this is a 'submit' input element */ function isNotSubmit(node) { return node.type !== 'submit'; } /** * Ensure field has a derived name */ function hasFieldName(node) { return getFieldName(node) !== 'unknown'; } /** * Attempt to ascertain "name" of field. * * they don't give inputs real `name` attributes, so * best guess is to hack around the element's label text, * falling back to the placeholder text. (their html is * not semantic and often labels erroneously reference * parent divs instead of sibling input elements) * * strip out the stars they show when validation fails * * if label is misplaced _and_ there's no placeholder, * this function is insufficient */ function getFieldName(input) { if (!input.labels.length) return input.placeholder || 'unknown'; var labelText = input.labels[0].textContent.trim(); return ~labelText.indexOf(' *') ? labelText.slice(0, labelText.indexOf(' *')) : labelText; } /** * Listen for form submissions and send identify * if you'd like an event too, just delete the '//' in the track line */ document.forms[0].addEventListener('submit', function(e) { analytics.identify(serialize(; // analytics.track('Submitted Form'); });