CINXE.COM
Recruter | Robert Half
<!DOCTYPE HTML> <html lang="fr-BE"> <head> <meta charset="UTF-8"/> <script defer="defer" type="text/javascript" src="/.rum/@adobe/helix-rum-js@%5E2/dist/rum-standalone.js"></script> <link rel="icon" type="image/x-icon" href="/content/dam/roberthalf/favicon.png"/> <!-- Preconnect links --> <link rel="preconnect" href="https://www.google.com"/> <link rel="preconnect" href="https://cdn.cookielaw.org"/> <link rel="preconnect" href="https://seoab.io"/> <link rel="dns-prefetch" href="https://prdmir-online.roberthalf.com"/> <link rel="preconnect" href="https://www.googletagmanager.com"/> <link rel="preconnect" href="https://resources.roberthalfonline.com"/> <meta name="template" content="campaign-template"/> <meta name="viewport" content="width=device-width, initial-scale=1"/> <meta name="robots" content="noindex, nofollow"/> <link rel="canonical" href="https://www.roberthalf.com/be/fr/c/recruter"/> <script> var salaryGuideGatingProperties = '{ enabled: false, redirectLocation: "null", key: "null" }'; if (salaryGuideGatingProperties.redirectLocation && !salaryGuideGatingProperties.redirectLocation.endsWith(".html")) { salaryGuideGatingProperties.redirectLocation += ".html"; } window.salaryGuideGatingProperties = salaryGuideGatingProperties; window.passesSalaryGuideGating = function() { if ( salaryGuideGatingProperties.enabled != undefined && salaryGuideGatingProperties.enabled.toString().toLowerCase() === "true" && window.localStorage.getItem("salaryGuideGatingKey") != salaryGuideGatingProperties.key && window.location.pathname != salaryGuideGatingProperties.redirectLocation ) { return false; } return true; } </script> <link media="print" rel="stylesheet" href="/etc.clientlibs/roberthalf/clientlibs/clientlib-base.lc-aadab028fda76fa101c57a36121a8a16-lc.min.css" type="text/css"> <script> let css = document.querySelector('link[media="print"]'); if(css) { css.media = "all"; } </script> <script> // window function to fetch UPO function getUPO() { let upoString = localStorage.getItem("unifiedProfileObject"); if (upoString === null || upoString === undefined) { return {}; } let parsedObject = decodeURIComponent(atob(upoString)); return JSON.parse(parsedObject); } // window function to update UPO async function setUPO(unifiedProfileObject) { const encodedString = btoa(encodeURIComponent(JSON.stringify(unifiedProfileObject))); localStorage.setItem("unifiedProfileObject", encodedString); await window.yieldToMain?.(); } </script> <script> window.addEventListener("rhcl-initialized", () => { window.setTimeout(handleClLoaded, 250); }); // Backup in case events do not sync up window.setTimeout(handleClLoaded, 5000); function handleClLoaded() { document.querySelector('style[data-source="rh-slot-style"]')?.remove(); } </script> <link rel="preload stylesheet" as="style" href="https://resources.roberthalfonline.com/rhcl/v28.0.0/assets/libraries/fontawesome6/css/all.css"/> <link rel="preload stylesheet" as="style" href="https://resources.roberthalfonline.com/rhcl/v28.0.0/css/rhcl.css"/> <link rel="preload" href="https://resources.roberthalfonline.com/rhcl/v28.0.0/assets/Fonts/NotoSans/notosans-display-light-webfont.woff2" as="font" crossorigin/> <link rel="preload" href="https://resources.roberthalfonline.com/rhcl/v28.0.0/assets/Fonts/NotoSans/notosans-display-webfont.woff2" as="font" crossorigin/> <link rel="preload" href="https://resources.roberthalfonline.com/rhcl/v28.0.0/assets/Fonts/NotoSans/notosans-regular-webfont.woff2" as="font" crossorigin/> <link rel="preload" href="https://resources.roberthalfonline.com/rhcl/v28.0.0/assets/Fonts/fontawesome6/fa-regular-400.woff2" as="font" crossorigin/> <script type="module" src="https://resources.roberthalfonline.com/rhcl/v28.0.0/lib/rhcl.esm.js" async></script> <style data-source="rh-slot-style"> [slot], rhcl-typography, rhcl-heading, rhcl-typeahead, .rhcl-typography, .rhcl-focused-search-block, .rhcl-block-paginated-feature, rhcl-modal, rhcl-block-stacking-cards, rhcl-block-focused-search, rhcl-search-bar, rhcl-button-group, rhcl-block-paired-content, .cmp-rhcl-focused-block-wrapper .cmp-rhcl-stacking-cards-block-wrapper, .cmp-container { visibility: hidden; } [slot]{font-family: "Noto Sans Regular";} h1[slot],h2[slot],h3[slot],h4[slot],h5[slot],h6[slot],p[slot]{ font-family: "Noto Sans Display";} </style> <script type="text/javascript"> window.pageObj = {}; izCountries = 'gb,de,fr,ch,cn,jp,cl,at,ae,be,nl,nz,hk,br,sg,au,lu'.split(","); naCountries = 'us,ca'.split(","); luxCountries = 'us,ca,de,be,gb,br'.split(","); euCountries = 'gb,de,fr,ch,at,ae,be,nl'.split(","); aemSettings ={ "rh_account_creation": { accountCreateResendEmailEndpoint: 'https:\/\/prd\u002Ddr.gen.api.roberthalfonline.com\/salesforce\u002Dapi\/resend\u002Demail', accountRoutingMap: { "email": '', "resume": '', "candidate-email": '', "msjo": '', "login": '', "pendingAccount": '', // "expiredVerification": '', "candidateExpired": '', "clientExpired": '', "hasWebAccountClientOnly": '', "hasWebAccount": '', } }, "rh_candidate_apply": { aiConsentEndpoint: 'https:\/\/prd\u002Ddr.rf.api.roberthalfonline.com\/candidate\u002Dapply\/update\u002Dai\u002Dconsent', accountCreateEndpoint:'https:\/\/prd\u002Ddr.rf.api.roberthalfonline.com\/candidate\u002Dapply\/create\u002Daccount', directAccountCreateEndpoint: 'https:\/\/prd\u002Ddr.rf.api.roberthalfonline.com\/candidate\u002Dapply\/create\u002Daccount', applyEndpoint:'https:\/\/prd\u002Ddr.rf.api.roberthalfonline.com\/candidate\u002Dapply\/job\u002Dapply', resendEmailEndpoint: 'https:\/\/prd\u002Ddr.gen.api.roberthalfonline.com\/salesforce\u002Dapi\/resend\u002Demail', submitResumeEndpoint:'https:\/\/prd\u002Ddr.rf.api.roberthalfonline.com\/candidate\u002Dapply\/submit\u002Dresume', resumeParseEndpoint:'https:\/\/prd\u002Ddr.rf.api.roberthalfonline.com\/parse\u002Dresume\/parse', xingUploadResumeEndpoint:'https:\/\/prd\u002Ddr.rf.api.roberthalfonline.com\/candidate\u002Dapply\/xing\u002Dresume', linkedInUploadResumeEndpoint:'https:\/\/prd\u002Ddr.rf.api.roberthalfonline.com\/candidate\u002Dapply\/job\u002Dapply\/linkedin\u002Dresume', geolocationEndpoint:'https:\/\/gen.api.roberthalfonline.com\/geocode\/getGeoByRegion?country_code=', googleGeoCodeEndpoint:'https:\/\/gen.api.roberthalfonline.com\/googlegeo\/getGeocode?address=', timezoneEndpoint:'https:\/\/prd\u002Ddr.gen.api.roberthalfonline.com\/timezone\/getTimezone', fetchSkills:'https:\/\/prd\u002Ddr.rf.api.roberthalfonline.com\/candidate\u002Dapply\/fetch\u002Dskills', patchSkills:'https:\/\/prd\u002Ddr.rf.api.roberthalfonline.com\/candidate\u002Dapply\/patch\u002Dskills', fetchResume:'https:\/\/prd\u002Ddr.rf.api.roberthalfonline.com\/candidate\u002Dapply\/job\u002Dapply\/fetch\u002Dresume', jobTypeValuesEndpoint:'https:\/\/gen.api.roberthalfonline.com\/iz\u002Dbranch\u002Dservice\/findJobTypeList', specializationValuesEndpoint:'https:\/\/gen.api.roberthalfonline.com\/iz\u002Dbranch\u002Dservice\/findSpecializationList', nearestOfficeValuesEndpoint:'https:\/\/gen.api.roberthalfonline.com\/iz\u002Dbranch\u002Dservice\/findOfficeList', xingPluginScript:'https:\/\/www.xing\u002Dshare.com\/plugins\/login_plugin.js', xingId:'82ac2657946cd0af3fa4' }, "rh_client_payment" :{ profileId:'EB9BBCE6\u002D70F7\u002D41BB\u002DB03B\u002DA8C27BB01D8E', accessKey: '5a4ab6d640e03d4dba86c1f9da33cf0b', maintenanceMode: 'false', cybersourceEndpoint:'https:\/\/secureacceptance.cybersource.com\/embedded\/pay', invoiceEndpoint:'https:\/\/prd\u002Ddr.gen.api.roberthalfonline.com\/cpp', }, "rh_job_search": { getAndSetSavedJobsEndpoint:'https:\/\/prd\u002Ddr.gen.api.roberthalfonline.com\/get\u002Dand\u002Dset\u002Djob\/query', jobAlertsEndpoint:'https:\/\/prd\u002Ddr.ma.api.roberthalfonline.com\/job\u002Dalerts\/subscribe', jobInterestEndpoint:'https:\/\/prd\u002Ddr.jps.api.roberthalfonline.com\/presented\u002Djob\/jobinterest', jobSearchEndpoint:'https:\/\/prd\u002Ddr.jps.api.roberthalfonline.com\/search', quickApplyEndpoint:'https:\/\/prd\u002Ddr.rf.api.roberthalfonline.com\/candidate\u002Dapply\/quick\u002Dapply', signInLink:'https:\/\/www.roberthalf.com\/login.rhlogin', jobSearchLocationTypeaheadEndpoint:'https:\/\/gen.api.roberthalfonline.com\/auto\u002Dcomplete\u002Daem\/search', feedbackDestinationEditAvailability:'avail', feedbackDestinationEditLocation:'loc', feedbackDestinationEditPayPreference:'pref', feedbackDestinationEditSkills:'skills', jobInterestFeedback:'https:\/\/prd\u002Ddr.rf.api.roberthalfonline.com\/candidate\u002Dapply\/feedback' }, "rh_multistep_job_order" :{ leadsProcessingEndpoint:'https:\/\/prd\u002Ddr.lp.api.roberthalfonline.com\/proxy\u002Dlead\u002Dprocessing\/send', jobFunctionTypeahead:'https:\/\/gen.api.roberthalfonline.com\/auto\u002Dcomplete\u002Daem\/job\u002Dfunction', skillSearch: 'https:\/\/prd\u002Ddr.gen.api.roberthalfonline.com\/sf\u002Dskills\/skillSearch', skillsRecommendation: 'https:\/\/prd\u002Ddr.gen.api.roberthalfonline.com\/sf\u002Dskills\/skillRecommendation', sfccRedirectUrl: 'https:\/\/online.roberthalf.com' }, "rh_candidate_discovery": { candidateJobTitleTypeaheadEndpoint: 'https:\/\/gen.api.roberthalfonline.com\/auto\u002Dcomplete\u002Daem\/job\u002Dfunction', candidateLocationTypeaheadEndpoint: 'https:\/\/gen.api.roberthalfonline.com\/auto\u002Dcomplete\u002Daem\/search' }, "rh_common": { accountCheckEndpoint:'https:\/\/prd\u002Ddr.gen.api.roberthalfonline.com\/check\u002Dstatus\/check?candidate_email=', geolocationEndpoint: 'https:\/\/qs01.int\u002Dqs\u002Dgen.api.roberthalfonline.com\/googlegeo\/getReverseGeocode', personDetailsEndpoint: '\/bin\/personDetails', recaptchaEndpoint: 'https:\/\/prd\u002Ddr.gen.api.roberthalfonline.com\/recaptcha\/verify\u002Dtoken', page_section: 'Performance Landing Pages', page_user_type: 'Client', page_type: 'Lead Form Page', isLuxCountry: 'true' } }; var articleDataLayer = { blog_type:'', industry_name :'', country_code :'', language :'', entityid :'', author_name :'', thumbnail_url :'', title :'', description :'', employment_type :'', published_date :'', page_url :'', categories :'', Article_tag :'' }; pageObj.__extrasettings__ = { language: 'fr', country: 'be' }; </script> <script type="text/javascript"> aemSettings.rh_common.recaptchaEndpoint = 'https:\/\/prd\u002Ddr.gen.api.roberthalfonline.com\/recaptcha\/verify\u002Dtoken'; </script> <title>Recruter | Robert Half</title> <meta property="og:locale" content="fr_BE"/> <meta property="og:updated_time" content="2024-11-06T03:00:43+0000"/> <meta property="og:type" content="website"/> <meta property="og:site_name" content="Robert Half Belgium"/> <meta property="og:image" content="https://www.roberthalf.com/content/dam/roberthalf/rh.png"/> <meta property="og:image:type" content="image/png"/> <meta property="og:image:width" content="500"/> <meta property="og:image:height" content="500"/> <meta property="og:image:alt" content="rh-logo"/> <meta property="og:url" content="https://www.roberthalf.com/be/fr/c/recruter"/> <meta property="og:title" content="Recruter"/> <meta property="og:description"/> <meta name="title" content="Recruter"/> <meta property="og:publication_time" content="2023-12-14T00:49:18+0000"/> <script> (function() { window.SM_SPLITSIGNAL = window.SM_SPLITSIGNAL || {ready: false} window.addEventListener( 'splitsignal.initialized', function() { if (!aemSettings.isReactApp) { window.SM_SPLITSIGNAL.ready = true } } ) var script = document.createElement('script') script.id = 'a4a03573-e3f5-4f01-8963-395af304b0b2' script.src = 'https://seoab.io/react/' script.type = 'module' script.defer = true document.head.appendChild(script) })() </script> <script type="application/ld+json"> { "@context": "http://schema.org", "@type": "WebPage", "name" : "Recruter", "url": "https://www.roberthalf.com/be/fr/c/recruter", "isPartOf": { "@type": "WebSite", "name": "Robert Half", "url": "https://www.roberthalf.com/be/fr", "publisher": { "type": "Organization", "name": "Robert Half", "legalName": "Robert Half Inc.", "url": "https://www.roberthalf.com/be/fr", "@id": "https://www.roberthalf.com/be/fr" } }, "mainEntity": [""], "mainEntityOfPage": "https://www.roberthalf.com/be/fr/c/recruter" } </script> <script async defer src="/etc.clientlibs/roberthalf/clientlibs/clientlib-clientId.lc-816e4fe05c72b7567d3214430c031c84-lc.min.js"></script> <script type="text/javascript"> function ready(a){if("function"!==typeof a)throw Error("Argument passed to ready should be a function");"loading"!=document.readyState?a():document.addEventListener?document.addEventListener("DOMContentLoaded",a,{once:!0}):document.attachEvent("onreadystatechange",function(){"loading"!=document.readyState&&a()})}; </script> <script async defer src="/etc.clientlibs/roberthalf/clientlibs/clientlib-base.lc-168e3592f00c8ea15749bb2bc2feb0d0-lc.min.js"></script> <!-- Language And Country fr-be Country be--> <!-- OptanonConsentNoticeStart --> <script id="onetrust-cdn" src="https://cdn.cookielaw.org/scripttemplates/otSDKStub.js" data-language="fr-be" type="text/javascript" charset="UTF-8" data-domain-script="018e5c95-e047-7780-80f2-15d224859ff6" async defer></script> <script type="text/javascript"> function OptanonWrapper() { checkConsentValues(); } </script> <!-- OptanonConsentNoticeEnd --> <!-- Check Cookie Value Start--> <script type="text/javascript"> var isPerformanceCookiesChecked = false; function checkConsentValues() { var consentRatio = getOptanonConsentRatio(); if (consentRatio != null && consentRatio.includes("2:1")) { isPerformanceCookiesChecked = true; var oneTrustEvent = new CustomEvent("rh-onetrust-accepted", { "detail": "vanilla js version of one trust event" }); var oneTrustJSEvent = new CustomEvent("rh-onetrust-accepted-js", { "detail": "vanilla js version of one trust event" }); document.dispatchEvent(oneTrustJSEvent); document.dispatchEvent(oneTrustEvent); } } window.setTimeout(checkConsentValues, 2000); function getCookie(cname) { var name = cname + '='; var decodedCookie = decodeURIComponent(document.cookie); var ca = decodedCookie.split(';'); for (var i = 0; i < ca.length; i++) { var c = ca[i]; while (c.charAt(0) == ' ') { c = c.substring(1); } if (c.indexOf(name) == 0) { return c.substring(name.length, c.length); } } return false; } function getOptanonConsentRatio() { const queryParams = new URLSearchParams(getCookie("OptanonConsent")); return queryParams.get('groups'); } </script> <!-- Check Cookie Value End--> <!-- TealiumStart --> <script type="text/javascript"> var utag_data = {"pageType":"Lead Form Page","pageSection":"section","pageName":"Français","countryCode":"be","currencyCode":"USD"}; // This script is provided, don't change without consulting the analytics team (function (a, b, c, d) { a = 'https://tags.roberthalf.com/belgium2/prod/utag.js'; b = document; c = 'script'; d = b.createElement(c); d.src = a; d.type = 'text/java' + c; d.async = true; a = b.getElementsByTagName(c)[0]; a.parentNode.insertBefore(d, a); })(); </script> <script async defer src="/etc.clientlibs/roberthalf/clientlibs/clientlib-tealium.lc-4045ddcc1948e9043decb7264c4cb7f5-lc.min.js"></script> <!-- TealiumEnd --> <!-- InvocaStart --> <!-- InvocaEnd --> <script src="/etc.clientlibs/roberthalf/clientlibs/clientlib-dependencies.lc-d41d8cd98f00b204e9800998ecf8427e-lc.min.js"></script> <link rel="stylesheet" href="/etc.clientlibs/roberthalf/clientlibs/clientlib-dependencies.lc-d41d8cd98f00b204e9800998ecf8427e-lc.min.css" type="text/css"> <script async src="/etc.clientlibs/core/wcm/components/commons/datalayer/v2/clientlibs/core.wcm.components.commons.datalayer.v2.lc-1e0136bad0acfb78be509234578e44f9-lc.min.js"></script> <script async src="/etc.clientlibs/core/wcm/components/commons/datalayer/acdl/core.wcm.components.commons.datalayer.acdl.lc-bf921af342fd2c40139671dbf0920a1f-lc.min.js"></script> </head> <body class="page basicpage" id="page-38631c3507" data-cmp-link-accessibility-enabled data-cmp-link-accessibility-text="s’ouvre dans un nouvel onglet" data-cmp-data-layer-enabled data-cmp-data-layer-name="adobeDataLayer"> <script> var dataLayerName = 'adobeDataLayer' || 'adobeDataLayer'; window[dataLayerName] = window[dataLayerName] || []; window[dataLayerName].push({ page: JSON.parse("{\x22page\u002D38631c3507\x22:{\x22@type\x22:\x22roberthalf\/components\/structure\/page\/page\x22,\x22repo:modifyDate\x22:\x222024\u002D11\u002D06T03:00:43Z\x22,\x22dc:title\x22:\x22CAMPAIGN\u002D01 | Hire\x22,\x22xdm:template\x22:\x22\/conf\/roberthalf\/settings\/wcm\/templates\/campaign\u002Dtemplate\x22,\x22xdm:language\x22:\x22fr\u002DBE\x22,\x22xdm:tags\x22:[],\x22repo:path\x22:\x22\/content\/roberthalf\/be\/fr\/c\/hire.html\x22}}"), event:'cmp:show', eventInfo: { path: 'page.page\u002D38631c3507' } }); </script> <rhcl-base path="https://resources.roberthalfonline.com/rhcl/v28.0.0" locale="fr-BE"></rhcl-base> <div class="root container-fluid cmp-container"> <div id="container-9ad031068e" class="cmp-container"> <div class="aem-Grid aem-Grid--12 aem-Grid--default--12 "> <div class="experiencefragment aem-GridColumn aem-GridColumn--default--12"> <div id="experiencefragment-c59db1c3a8" class="cmp-experiencefragment cmp-experiencefragment--header"> <div id="container-85a7bc7ef6" class="cmp-container"> <div class="aem-Grid aem-Grid--12 aem-Grid--default--12 "> <div class="root container-fluid cmp-container aem-GridColumn aem-GridColumn--default--12"> <div class="cq-placeholder" data-emptytext="Navigation: Header"> </div> <div id="header-dc218f0491" class="cmp-container"> <div id="skipToMainContent" data-skipToMainContent-label="Se rendre au menu principal"></div> <script> // needs to run once on any page with a nav header function identifyFirstComponent() { try { const excludedTags = ["RHCL-BLOCK-NAVIGATION", "RHCL-BLOCK-COOKIE-BAR"]; const rhclContentBlocks = Array.from(document.querySelectorAll("body *")) .filter( (elem) => elem.tagName.startsWith("RHCL-BLOCK") || elem.classList.contains("rh-homepage-hero") || elem.classList.contains("rh-first-component") ) .filter((elem) => !excludedTags.includes(elem.tagName)); const maxTries = 10; let tries = 1; const nav = document.querySelector("rhcl-block-navigation"); if (nav && nav.getAttribute("background") == "transparent") { // find first component if (rhclContentBlocks.length > 0) { rhclContentBlocks[0].setAttribute( "data-first-component-padded", "true" ); } else { tries++; if (tries <= maxTries) { setTimeout(identifyFirstComponent, 500); } } } else { const hero = document.querySelector(".rh-homepage-hero"); if (hero) { hero.removeAttribute("data-first-component-padded"); } } } catch (error) { console.log(error); } } window.ready(() => { window.dispatchEvent(new Event("scroll")); identifyFirstComponent(); }); </script> <rhcl-block-navigation branding-destination="/be/fr" account-menu-label="Mon compte" branding-external="false" branding-title="Robert Half" sign-in-label="Se connecter" sign-in-destination="https://roberthalf.prato.be" sign-in-external="true" background="white" theme="light" enable-sign-in-menu="true"> <rhcl-site-search slot="site-search" search-destination="/be/fr/rechercher?param=:1" max-results="3" theme="light"> <a slot="quick-link" href="/be/fr/bureaux"><rhcl-typography variant="body2">Nos bureaux</rhcl-typography></a> <a slot="quick-link" href="/be/fr/emplois"><rhcl-typography variant="body2">Recherche d'emploi</rhcl-typography></a> </rhcl-site-search> <rhcl-list-base slot="sign-in-menu" variant="none"> <rhcl-menu-link slot="item" label="Compte du demandeur d’emploi" destination="https://online.roberthalf.com/s/fr-BE/login?a=RH&c=BE&d=fr_BE&language=fr_BE" external="true"> </rhcl-menu-link> <rhcl-menu-link slot="item" label="Approuver des Timesheets" destination="https://roberthalf.prato.be" external="true"> </rhcl-menu-link> </rhcl-list-base> <rhcl-list slot="account-menu" data-header-menu-endpoint="/graphql/execute.json/roberthalf/headerMenuItems" data-folder-path="/content/dam/roberthalf/content-fragments/fr_be/account-menu-links" data-account-menu-config="{"[lux-tokens:lightning-page]":"https://online.roberthalf.com/s","[lux-tokens:visualforce-page]":"https://online.roberthalf.com","[lux-tokens:rhdirect-page]":"https://online.roberthalf.com/mpredirect","[site:url]":"https://www.roberthalf.com/"}" headline=""/> </rhcl-block-navigation> </div> <script type="text/javascript"> function initializeAccountMenu() { var accountMenu = document.querySelector('rhcl-list[slot="account-menu"]'); var userId = getCookie("apex__userid"); var userPermissions = getCookie("apex__psa"); if (!userId || !userPermissions) { if (accountMenu) { accountMenu.remove(); } return; } var userFirstName = getCookie("apex__firstname"); var userLastName = getCookie("apex__lastname"); accountMenu.setAttribute("headline", userFirstName + " " + userLastName); var userPermissionsArray = userPermissions.split(","); var accountMenuLinks = []; var accountMenuLinksAPI = accountMenu.getAttribute("data-header-menu-endpoint"); var accountMenuLinkCFFolderPath = accountMenu.getAttribute("data-folder-path"); var accountMenuConfig = accountMenu.getAttribute("data-account-menu-config"); if (!accountMenuLinkCFFolderPath) { accountMenuLinkCFFolderPath = ""; } var completeAPI = accountMenuLinksAPI + ";cfFolderPath=" + accountMenuLinkCFFolderPath; fetch(completeAPI) .then(response => { if (!response.ok) { throw new Error('Network response was not ok'); } return response.json(); }) .then(data => { accountMenuLinks = data.data.headerMenuItemList.items; function getLinkTargetBoolean(linkTarget) { if (linkTarget) { linkTarget = linkTarget.toLowerCase(); } if (linkTarget == "_blank" || linkTarget === "true") { return "true"; } return "false"; } accountMenuLinks.sort(function (a, b) { return a.displayWeight - b.displayWeight }); for (var i = 0; i < accountMenuLinks.length; i++) { var accountMenuLink = accountMenuLinks[i]; if ((accountMenuLink.showToAllLoggedInUsers != null && accountMenuLink.showToAllLoggedInUsers == true) || doPermissionsMatch(accountMenuLink.permissions, userPermissionsArray)) { var menuItemElement = document.createElement("rhcl-menu-link"); var link, mobileLink; menuItemElement.setAttribute("slot", "item"); menuItemElement.setAttribute("label", accountMenuLink.linkDisplayText); menuItemElement.setAttribute("external", getLinkTargetBoolean(accountMenuLink.linkTarget)); if(accountMenuLink.linkUrl){ link = modifyLink(accountMenuLink.linkUrl, accountMenuConfig); }else{ link=""; } if(accountMenuLink.mobileUrlOverride){ mobileLink = modifyLink(accountMenuLink.mobileUrlOverride, accountMenuConfig); }else{ mobileLink=""; } menuItemElement.setAttribute("destination", link); menuItemElement.setAttribute("mobile-destination", mobileLink); accountMenu.append(menuItemElement); } } }) .catch(error => { console.error('There was a problem with the fetching the account menu items:', error); }); } function getCookie(cname) { var name = cname + "="; var decodedCookie = decodeURIComponent(document.cookie); var ca = decodedCookie.split(';'); for (var i = 0; i < ca.length; i++) { var c = ca[i]; while (c.charAt(0) == ' ') { c = c.substring(1); } if (c.indexOf(name) == 0) { return c.substring(name.length, c.length); } } return ""; } function doPermissionsMatch(array1, array2) { if (!array1 || !array2) { return false; } for (let i = 0; i < array2.length; i++) { if (array1.includes(array2[i].trim())) { return true; } } return false; } function modifyLink(link, accountMenuConfig) { if (accountMenuConfig) { var accountMenuConfigJSON = JSON.parse(accountMenuConfig); for (var key in accountMenuConfigJSON) { if (accountMenuConfigJSON.hasOwnProperty(key)) { link = link.replace(key, accountMenuConfigJSON[key]); } } } return link; } initializeAccountMenu(); </script> </div> </div> </div> </div> </div> <div class="root container-fluid cmp-container aem-GridColumn aem-GridColumn--default--12"> <div id="container-e87104ab24" class="cmp-container"> <div class="aem-Grid aem-Grid--12 aem-Grid--default--12 "> <div class="root container-fluid cmp-container rhcl__background--primary rhcl__background-style--curved aem-GridColumn aem-GridColumn--default--12"> <rhcl-block-hero-form variant="accent-image" heading-tag="h1" escape-hatch-text="Vous êtes à la recherche d'un emploi?" escape-hatch-link-text="Consulter nos offres" escape-hatch-link-destination="/be/fr/emplois" background="primary" background-style="curved"> <h1 slot="headline">Trouvez le bon profil dans votre région</h1> <span slot="copy">Optimisez votre processus de recrutement avec Robert Half. Notre équipe d’expert vous accompagne tout au long de votre recherche, pour vous permettre de trouver rapidement le meilleur profil. Vous cherchez à recruter sur une base intérim, permanente ou pour des missions de management ponctuelles ? Faites appel à notre expertise dans les solutions de gestion des talents. Nous sommes spécialisés dans le recrutement de talents dans les domaines de la finance et de la comptabilité, de l'administration, RH et service client, de l'IT et du juridique. </span> <h1 slot="form-headline">À la recherche de talents ?</h1> <!-- using dynamic media template --> <img slot="accent-image" loading="eager" fetchpriority="high" sizes="(min-width: 1024px) 480px,(min-width: 768px) 336px,(min-width: 0px) 317px" srcset="https://s7d9.scene7.com/is/image/roberthalfintl/sq2-40001?$Squircle2-Large-1x$&fmt=webp-alpha 480w,https://s7d9.scene7.com/is/image/roberthalfintl/sq2-40001?$Squircle2-Medium-1x$&fmt=webp-alpha 336w,https://s7d9.scene7.com/is/image/roberthalfintl/sq2-40001?$Squircle2-Small-1x$&fmt=webp-alpha 317w" src="https://s7d9.scene7.com/is/image/roberthalfintl/sq2-40001?$Squircle2-Large-1x$&fmt=webp-alpha" alt aria-hidden="true"/> <div slot="form-content"> <div id="experiencefragment-6692b8bc60" class="cmp-experiencefragment cmp-experiencefragment--SSJO"> <div id="container-eba7f8e22c" class="cmp-container"> <div class="aem-Grid aem-Grid--12 aem-Grid--default--12 "> <div class="root container-fluid cmp-container aem-GridColumn aem-GridColumn--default--12"> <style> .form-container{padding:40px 24px} .form-container .form-header{text-align:center;margin-bottom:40px;display:flex;justify-content:center;flex-direction:column;align-items:center} .form-container .form-header .header-text{margin-bottom:26px} .form-container .form-field-set .field-set-header{margin-bottom:24px} .form-container .form-field-set .field-element-row{margin-bottom:8px} .form-container .form-footer{gap:24px;margin-top:28px;justify-content:center} .form-container .form-footer .form-submit-btn{display:flex;justify-content:center;flex-direction:column;align-items:center;gap:24px;#showRedirectStatus{display:none} } .form-container .form-footer .form-submit-btn rhcl-button{width:100%} .form-container .form-footer .form-foot-note{text-align:left} .form-container .form-footer .form-foot-note .rhcl-typography{display:flex;flex-direction:column;gap:16px;padding:0;margin:0 !important;rhcl-typography{text-align:center} } .form-container .form-footer .form-foot-note .rhcl-typography--variant-legal{font-size:12px;letter-spacing:normal;line-height:1.5;font-family:"Noto Sans Regular",OpenSansRegular,"Open Sans Regular","Noto Sans",sans-serif !important} .form-container .form-footer .form-foot-note .rhcl-typography--variant-legal a:hover:after{width:100%;opacity:1} .cmp-experiencefragment .form-container{padding:0} .mobile-app-form .form-foot-note .rhcl-typography p{padding:0;white-space:pre-wrap;margin:0 !important} .mobile-app-form .form-foot-note .rhcl-typography--variant-legal p{font-size:12px;letter-spacing:normal;line-height:1.5;font-family:"Noto Sans Regular",OpenSansRegular,"Open Sans Regular","Noto Sans",sans-serif !important} .mobile-app-form .form-foot-note .rhcl-typography--variant-legal a:hover:after{width:100%;opacity:1} .mobile-app-form .form-div{padding:48px 0 21px 0} #backdrop{position:absolute;top:0;left:0;width:100%;height:100%;z-index:20;background-color:rgba(0,0,0,0.05)} .loader-div{display:flex;justify-content:center;align-items:center;height:100%} @media screen and (min-width:768px){.form-container{padding:48px 40px} .form-container .form-footer .form-submit-btn rhcl-button{width:unset} .form-container .form-footer .form-foot-note{text-align:center} .cmp-experiencefragment .form-container{padding:0} } .cmp-experiencefragment--salary-guide .form-footer{margin-top:0} .grecaptcha-badge{visibility:hidden !important} </style> <script type="text/javascript"> function parseQuery(queryString) { var query = {}; var pairs = ( queryString[0] === "?" ? queryString.substr(1) : queryString ).split("&"); for (var i = 0; i < pairs.length; i++) { var pair = pairs[i].split("="); query[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1] || ""); } return query; } function phonePrepopFormatter(phone) { const country = window["pageObj"]?.["__extrasettings__"]?.["country"]; if (phone !== null && phone !== undefined) { try { // Remove any non-digit characters let formattedPhone = phone?.replaceAll(/\D/g, ""); if (country === "us" || country === "ca") { // For NA, remove leading 1's and 0's while (/^[01]/.test(formattedPhone.charAt(0))) { formattedPhone = formattedPhone?.substring(1); } } return formattedPhone; } catch (error) { console.error("Failed to format phone:", error); return phone; } } else { return phone; } } function queryParamPrefill() { const handleElementPrefill = (elements, prefillData) => { Object.keys(elements).forEach((name) => { elements[name].forEach((element) => { //handle element auto fill if (element) { switch (element.nodeName) { case "RHCL-DROPDOWN": { const prefillDropdown = (element) => { if (element && element.children && element.children.length) { Array.from(element.children).forEach((child) => { child.selected = prefillData[name] == child.value; }); element.value = prefillData[name]; return true; } }; // try to fill dropdown if (!prefillDropdown(element)) { // if it's not available yet wait for children to be added function onAttributesChanged(_, observer) { // check if child nodes are available const childNodes = Array.from(element.children); for (const child of childNodes) { if (child.value !== undefined) { const prefilled = prefillDropdown(element); if (prefilled) { observer.disconnect(); // disconnect after prefilling } return; } } } // setup attribute mutation observer to fire event with const observer = new MutationObserver(onAttributesChanged); observer.observe(element, { attributes: true }); } break; } case "RHCL-CHECKBOX": { const prefillCheckbox = () => { if (element.interactionRef) { // interactionRef is available, set checked state element.interactionRef.checked = prefillData[name].toLowerCase() == "true"; return true; } }; // if checkbox wasn't available wait for mutation to make it so if (!prefillCheckbox()) { function onMutation(_, observer) { // try to fill checkbox on mutation if (prefillCheckbox()) { // disconnect after prefilling observer.disconnect(); } } // setup attribute mutation observer to fire event with interactionRef const observer = new MutationObserver(onMutation); observer.observe(element, { childList: true, subtree: true, attributes: true, }); } break; } default: element.value = prefillData[name]; if (element.name == "phoneNumber") { let formattedPhone = phonePrepopFormatter(element.value); element.value = formattedPhone; } } } }); }); }; const search = window.location.search; if (search.length && search[0] === "?") { const params = parseQuery(search); //handle form data query param if (params.fd) { const prefillData = parseQuery(atob(params.fd)); const elements = {}; Object.keys(prefillData).forEach((name) => { elements[name] = document.getElementsByName(name); }); const fd = params.fd; if (fd !== null) { const decodedParams = atob(fd); const baseUrl = window.location.origin; let formValue = baseUrl + window.location.pathname + search.replace(/(fd=)[^&$]*/g, decodedParams); if (document.querySelector("#formUrl")) { document.querySelector("#formUrl").value = formValue; handleElementPrefill(elements, prefillData); } } } else { //if no form data query, use all other params and prefill accordingly const elements = {}; Object.keys(params).forEach((name) => { elements[name] = document.getElementsByName(name); }); handleElementPrefill(elements, params); } } } const setRhInternalTracking = () => { // if medium = "Email" tracking = Email Campaign // if medium = "ppc" tracking = Ad Campaign // else tracking = Not found // fd encoded query param has precedence over other query params const trackingTypeElements = document.getElementsByName( "rhInternalTrackingType" ); const trackingValueElements = document.getElementsByName( "rhInternalTrackingValue" ); if (trackingTypeElements.length && window.location.search.length) { const queryParams = parseQuery(window.location.search); const fdParams = queryParams.fd && parseQuery(atob(queryParams.fd)); const medium = (fdParams && fdParams.utm_medium) || queryParams.utm_medium; const campaignValue = (fdParams && fdParams.utm_campaign) || queryParams.utm_campaign || ""; if (medium) { switch (medium.toLowerCase()) { case "paid-social": case "ppc": trackingTypeElements.forEach((el) => (el.value = "Ad Campaign")); break; case "email": trackingTypeElements.forEach((el) => (el.value = "Email Campaign")); break; default: trackingTypeElements.forEach((el) => (el.value = "Not found")); break; } } if (campaignValue) { trackingValueElements.forEach((el) => (el.value = campaignValue)); } } }; /***************************Hidden Field Logic*********************************************/ window.ready(function () { document.querySelectorAll("#backdrop").forEach((ele) => { ele.style.display = "none"; }); if (document.querySelectorAll(".hiddenfield").length > 0) { //get country name from url function getCountryName() { var pagePath = new URL(window.location); pagePath = pagePath.pathname.replace("/content/roberthalf", ""); var country = pagePath.split("/")[1]; country = country != undefined ? country.toUpperCase() : ""; var countryArray = [...document.querySelectorAll("#country")]; countryArray.forEach(function (ele) { ele.value = country; }); } //get language name from url function getLanguageName() { var pagePath = new URL(window.location); pagePath = pagePath.pathname.replace("/content/roberthalf", ""); var language = pagePath.split("/")[2]; var country = pagePath.split("/")[1]; var languageArray = [...document.querySelectorAll("#language")]; languageArray.forEach(function (ele) { ele.value = language + "_" + country; }); } window.addEventListener("rh-client-id-set", function () { getGoogleAnalyticsId(); getTealiumId(); }); //get lob function getLob() { var lob = getURLParameter("lob"); lob = lob != undefined ? lob : ""; var lobArray = [...document.querySelectorAll("#lob")]; lobArray.forEach(function (ele) { ele.value = lob; }); } function getFormUrl() { var formUrlArray = [ ...document.querySelectorAll("#formUrl"), ...document.querySelectorAll("#requestUrl"), ...document.querySelectorAll("#formUrlEncoded"), ]; formUrlArray.forEach(function (ele) { ele.value = new URL(window.location).href; }); } //current date and time in format YYYY-MM-DD HH:MM:SS function currentDateTime() { var d = new Date(); d = d.getFullYear() + "-" + (d.getMonth() + 1 < 10 ? "0" + (d.getMonth() + 1) : d.getMonth() + 1) + "-" + (d.getDate() < 10 ? "0" + d.getDate() : d.getDate()) + " " + (d.getHours() < 10 ? "0" + d.getHours() : d.getHours()) + ":" + (d.getMinutes() < 10 ? "0" + d.getMinutes() : d.getMinutes()) + ":" + (d.getSeconds() < 10 ? "0" + d.getSeconds() : d.getSeconds()); return d; } function getMiddleInitial() { var middleInitial = currentDateTime(); var middleInitialArray = [...document.querySelectorAll("#middleInitial")]; middleInitialArray.forEach(function (ele) { ele.value = middleInitial; }); } //get ip address function getIpAddress() { fetch("https://jsonip.com/") .then((response) => response.json()) .then((data) => { var ipAddressArray = [ ...document.querySelectorAll("#ipAddress"), ...document.querySelectorAll("#remoteAddrIp"), ]; ipAddressArray.forEach(function (ele) { ele.value = data.ip; }); }) .catch((error) => { console.error("Error fetching IP address:", error); }); } function getGoogleAnalyticsId() { var googleAnalyticsArray = [ ...document.querySelectorAll("#googleAnalyticsId"), ]; googleAnalyticsArray.forEach(function (ele) { ele.value = window.clientId; }); } function getTimeStamp() { var dt = new Date(); var h = dt.getHours(), m = (dt.getMinutes() < 10 ? "0" : "") + dt.getMinutes(); var strDate = dt.getFullYear() + "-" + (dt.getMonth() + 1) + "-" + dt.getDate(); var currentTime = h > 12 ? h - 12 + ":" + m + " PM" : h + ":" + m + " AM"; var currDate = "'" + strDate + "'"; var currentTimeStamp = Date.parse(currDate + currentTime); return currentTimeStamp; } function getSourceId() { var rhdSourceId = getURLParameter("rhdSourceId"); if (rhdSourceId != undefined) { var currentTimeStamp = getTimeStamp(); var rhdSourceIdArray = [...document.querySelectorAll("#rhdSourceId")]; rhdSourceIdArray.forEach(function (ele) { ele.value = rhdSourceId + "-" + currentTimeStamp; }); } else { var formContainer = document.querySelector(".form-container"); var id = formContainer ? formContainer.id : ""; var rhdSourceIdArray = [...document.querySelectorAll("#rhdSourceId")]; rhdSourceIdArray.forEach(function (ele) { ele.value = id + "-" + currentTimeStamp; }); } } function getUtmSource() { var utmsource = getURLParameter("utm_source"); utmsource = utmsource != undefined ? utmsource : ""; var utmSourceArray = [...document.querySelectorAll("#utmSource")]; utmSourceArray.forEach(function (ele) { ele.value = utmsource; }); } function getUtmCampaign() { var campaign = getURLParameter("utm_campaign"); campaign = campaign != undefined ? campaign : ""; var utmCampaignArray = [...document.querySelectorAll("#utmCampaign")]; utmCampaignArray.forEach(function (ele) { ele.value = campaign; }); } function getSfJoNumber() { var sfJoNumber = getURLParameter("sfJoNumber"); sfJoNumber = sfJoNumber != undefined ? sfJoNumber : ""; var sfJoNumberArray = [...document.querySelectorAll("#sfJoNumber")]; sfJoNumberArray.forEach(function (ele) { ele.value = sfJoNumber; }); } function getTealiumId() { var tealiumIdArray = [...document.querySelectorAll("#tealiumId")]; tealiumIdArray.forEach(function (ele) { ele.value = window?.tealiumId; }); } function getGclid() { var searchParams = parseQuery(window.location.search); var gclidVal = searchParams?.gclid ? searchParams.gclid : "not defined"; var gclidArray = [...document.querySelectorAll("#gclid")]; gclidArray.forEach(function (ele) { ele.value = gclidVal; }); } function getSfContactId() { var sfContactId = getURLParameter("sfContactId"); sfContactId = sfContactId != undefined ? sfContactId : ""; var sfContactIdArray = [...document.querySelectorAll("#sfContactId")]; sfContactIdArray.forEach(function (ele) { ele.value = sfContactId; }); } function getURLParameter(sParam) { var sPageURL = new URL(window.location); sPageURL = sPageURL.search.substring(1); var sURLVariables = sPageURL.split("&"); for (var i = 0; i < sURLVariables.length; i++) { var sParameterName = sURLVariables[i].split("="); if (sParameterName[0] == sParam) { return sParameterName[1]; } } } function updatePageHeading() { var replaceFields = [ { replace: "{positionTitle}", queryParam: "positionTitle" }, { replace: "{city}", queryParam: "city" }, { replace: "{country}", queryParam: "country" }, { replace: "{location}", queryParam: "location" }, { replace: "{jobtitle}", queryParam: "jobtitle" }, ]; const queryParams = parseQuery(window.location.search); replaceFields.forEach((replacement) => { const value = queryParams[replacement.queryParam] || null; const hfbHeadlineElement = document.querySelector( "rhcl-block-hero-form" ); const hfbHeadline = hfbHeadlineElement ? encodeURIComponent(hfbHeadlineElement.getAttribute("headline")) : ""; if (value !== null && hfbHeadline.indexOf(replacement.replace) > -1) { hfbHeadline.replace(replacement.replace, value); document .querySelector("rhcl-block-hero-form") .setAttribute("headline", sentence.replaceAll("%20", " ")); } }); } getCountryName(); getLanguageName(); getLob(); getFormUrl(); getMiddleInitial(); getIpAddress(); getGoogleAnalyticsId(); getSourceId(); getUtmSource(); getUtmCampaign(); getSfJoNumber(); getTealiumId(); getGclid(); getSfContactId(); } if (document.querySelectorAll("rhcl-block-hero-form").length > 0) { updatePageHeading(); } // use fd prefill after to give precedence to fd querystrings setRhInternalTracking(); }); window.addEventListener("rhcl-initialized", () => { queryParamPrefill(); }); queryParamPrefill(); (function() { var test = document.querySelectorAll("#recaptcha").length; var recaptchaFlag = 0; const firstRhclButton = document.querySelector("rhcl-button"); const recaptchaFailMessage = firstRhclButton && firstRhclButton?.getAttribute("data-recaptcha-message"); const recaptchaEndpoint = aemSettings?.rh_common?.recaptchaEndpoint; const bypassToken = document.getElementById("bypassToken"); let formActionUrlIterable = new Map(); let bypassPerimeter = ""; if (bypassToken != null) { bypassPerimeter = bypassToken.getAttribute("value"); } //Request types and associated fields let requestData; var candidateWorkHistory = { recaptchaEnabled: "", invisibleRecaptchaToken: "", subscriberKey: "", }; let jobAlertRequestObject = { candidateEmailAddress: "", locale: "", keywords: "", keywordsNoSpaces: "", subscriptionSource: "rhWebsite", countryCode: "", searchResultsUrl: "", subscriptionSourceUrl: "", postedWithin: "", jobType: "", empType: "", cityId: "", cityTxt: "", jobAlertsSubscriptionId: "", lobName: "", location: "", locationNoSpaces: "", googleAnalyticsClientId: "", emailFrequency: "W", jobOrderRecommendationsCount: "5", insrtDttmHist: "", subscriptionType: "Manual", status: "A", }; var leadApiRequestObject = { recaptchaEnabled: "", invisibleRecaptchaToken: "", servicePreference: "", startDate: "", languageLocale: "", rhAnalyticsAddInfo: "", routingEmail: "", candidateReference1: "", candidateFunctionalRole1: "", candidateReference2: "", candidateFunctionalRole2: "", candidateReference3: "", candidateFunctionalRole3: "", candidateReference4: "", candidateFunctionalRole4: "", candidateReference5: "", candidateFunctionalRole5: "", additionalAttribute1: "", additionalAttribute2: "", additionalAttribute3: "", additionalAttribute4: "", additionalAttribute5: "", skillsRequested: "", experienceDurationMin: "", experienceDurationMax: "", experiencePeriod: "", educationLevel: "", payRateMin: "", payRateMax: "", payPeriod: "", payRateCurrency: "", additionalInfo: "", actionRequestedOfLp: "SUBMIT", rhInternalTrackingType: "", }; var newsApiObject = { recaptchaEnabled: "", invisibleRecaptchaToken: "", }; function scrollToTopOfForm() { const formContainer = document.querySelector(".form-container"); if (formContainer) { const topEl = formContainer .closest("rhcl-block-hero-form") ?.shadowRoot?.querySelector(".rhcl-block-hero-form__form"); const topOfForm = topEl?.getBoundingClientRect()?.top; const defaultHeaderHeight = 78; const headerHeight = parseInt( getComputedStyle(formContainer).getPropertyValue( "--rhcl-main-navigation-height" ), 10 ) || defaultHeaderHeight; if (top !== undefined) { setTimeout(() => { window.scrollTo({ top: topOfForm + window.scrollY - headerHeight, behavior: "smooth", }); }, 500); } } } function getURLParameters() { const urlSearchParams = new URLSearchParams(window.location.search); const params = Object.fromEntries(urlSearchParams.entries()); return params; } function getByPassStatus(params) { var arrayLength = params.length; for (var i = 0; i < arrayLength; i++) { if (params[i] === bypassPerimeter) { return 0; } } return 1; } function setKeyValueInUPO(key, unifiedProfileObject, value) { //set a particular key value in UPO unifiedProfileObject[key] = value; return unifiedProfileObject; } function saveGatingPropertyInUPO() { if (localStorage.getItem("unifiedProfileObject") != null) { var unifiedProfileObject = window.getUPO(); const gatingProperties = document.querySelector(".gating-properties"); if (gatingProperties != null) { var gatingProperty = gatingProperties.getAttribute("gatingproperty") != undefined ? gatingProperties.getAttribute("gatingproperty") : "sgGatingFormSubmitted"; unifiedProfileObject = setKeyValueInUPO( gatingProperty, unifiedProfileObject, window.salaryGuideGatingProperties.key ); window.setUPO(unifiedProfileObject); } } window.localStorage.setItem( "salaryGuideGatingKey", window.salaryGuideGatingProperties.key ); } var businessUnit = { us: "na", ca: "na", au: "iz_apac_sam", br: "iz_apac_sam", cl: "iz_apac_sam", cn: "iz_apac_sam", hk: "iz_apac_sam", jp: "iz_apac_sam", nz: "iz_apac_sam", sg: "iz_apac_sam", be: "iz_eu", ch: "iz_eu", de: "iz_eu", fr: "iz_eu", nl: "iz_eu", uk: "iz_eu", }; const removeTags = (str) => { if (str === null || str === "") { return false; } else { str = str.toString(); } // Regular expression to identify HTML tags in the input string. Replacing the identified HTML tag with a null string. str = str.replace(/(<([^>]+)>)/gi, ""); // Regular expression to identify enter in the input string. Replacing the identified enter with a null string. return (str = str.replace(/\r?\n|\r/g, "")); }; //Success handling for form submit redirect function handleShowRedirectStatusSuccess(form, thisInstance) { form.nextElementSibling.style.display = "none"; let thankYouPage = thisInstance .getAttribute("destination") .replace("/content/roberthalf", "") .replace(".html", ""); const redirectionUrl = window.localStorage.getItem("redirectionUrl"); if ( thankYouPage !== undefined && thankYouPage !== "" && thankYouPage != null ) { if (redirectionUrl) { if (thankYouPage.includes("html")) { thankYouPage = thankYouPage.split(".")[0]; thankYouPage += redirectionUrl + ".html"; } else { thankYouPage += redirectionUrl; } localStorage.removeItem("redirectionUrl"); } const timeout = thisInstance.getAttribute("data-redirect-delay") || 0; const target = thisInstance.getAttribute("data-redirect-target") || "_self"; if (target === "_self") { setTimeout(()=> { window.location.replace(thankYouPage); }, timeout); } else { window.open(thankYouPage, "_blank"); } } } //Success handling for email modal function handleEmailModalSuccess(form) { form.nextElementSibling.style.display = "none"; document.querySelector("#email-model").removeAttribute("show-modal"); if (document.querySelector("#thankyou-modal") !== null) { document .querySelector("#thankyou-modal") .setAttribute("show-modal", ""); let thankUName, thankUEmail; if (localStorage.getItem("unifiedProfileObject") != null) { thankUName = window.getUPO().firstName; thankUEmail = window.getUPO().emailAddress ? window.getUPO().emailAddress : window.getUPO().email; } let thankYouHeading = document.querySelector( "#thankyou-modal rhcl-heading" ); let thankYouEmail = document.querySelector( "#thankyou-modal rhcl-typography" ); if (thankYouHeading != null) { let thankYouName = document .querySelector("#thankyou-modal rhcl-heading") .getAttribute("data-attribute-heading"); thankYouName = thankYouName.replace("<>", thankUName); document.querySelector( "#thankyou-modal rhcl-heading" ).textContent = thankYouName; } if (thankYouEmail != null) { let thankYouEmail = document .querySelector("#thankyou-modal rhcl-typography") .getAttribute("data-attribute-disclaimer"); thankYouEmail = thankYouEmail.replace("<>", thankUEmail); document.querySelector( "#thankyou-modal rhcl-typography" ).textContent = thankYouEmail; } } } //Success handling for form submit popup message function handlePopupStatusSuccess(form, response){ form.nextElementSibling.style.display = "none"; const alertEl = document.querySelector( ".form-container rhcl-alert" ); const formContainer = document.querySelector(".form-container"); const formContentEls = document.querySelectorAll( '[slot="form-content"]' ); if (alertEl) { alertEl.style.display = "none"; } if (formContainer) { formContainer.style.display = "none"; } formContentEls.forEach((el) => { el.style.display = "flex"; el.style.justifyContent = "center"; el.style.flexWrap = "wrap"; }); let successMsg = response.hasOwnProperty("request_message") ? response.request_message : "The action was processed successfully."; successMsg = (document.querySelector("#showPopupStatus") && document.querySelector("#showPopupStatus").getAttribute("data-copy")) ? document .querySelector("#showPopupStatus") .getAttribute("data-copy") : successMsg; successMsg = (document.querySelector("#showRedirectAndPopupStatus") && document.querySelector("#showRedirectAndPopupStatus").getAttribute("data-copy")) ? document .querySelector("#showRedirectAndPopupStatus") .getAttribute("data-copy") : successMsg; successMsg = removeTags(successMsg); document .querySelectorAll('[slot="form-content"]') .forEach(function (element) { element.insertAdjacentHTML( "afterbegin", `<rhcl-typography tag='p' variant='body1'>${successMsg}</rhcl-typography>` ); }); scrollToTopOfForm(); } function ajaxCall(input, thisInstance, form) { let successRedirectStatus = false; let successPopupStatus = false; let successEmailModalStatus = false; const handleDataValidationFailed = (messageKey, message, form) => { if ( messageKey === "20_validationFailed_invisibleRecaptchaToken" || messageKey === "20_validationFailed_invisibleRecaptchaScore" ) { form.nextElementSibling.style.display = "none"; showInteractiveReCaptcha(); } else if ( messageKey === "20_validationFailed_interactiveRecaptchaToken" || messageKey === "20_validationFailed_interativeRecaptchaToken" ) { form.nextElementSibling.style.display = "none"; displayCustomAlert(message); } else if ( messageKey === "20_validationFailed_interactiveRecaptchaToken" || messageKey === "20_validationFailed_interativeRecaptchaToken" ) { form.nextElementSibling.style.display = "none"; displayCustomAlert(message); } else { cleanUpRecaptcha(); } }; const handleFormTypeAnalytics = () => { const formTypeVal = document.querySelector( ".rhformhiddenfield input[name=formType]" ); const projectTypeVal = document.querySelector( ".rhformhiddenfield input[name=projectType]" ); if (formTypeVal && requestData?.formType && formTypeVal.value !== requestData.formType) { formTypeVal.value = requestData.formType; } let analyticObj; //Single step job order form if (formTypeVal && formTypeVal.value === "job-order") { var industry = document.querySelector( "form rhcl-text-field[name=industry]" )?.value; analyticObj = { tealium_event: "job_order_submit", datalayer_version: 2, event_action: "rhcl-button-clicked", event_text: document .querySelector("form rhcl-button") .getAttribute("component-tracking-label"), form_email: window.getUPO().email ? window.getUPO().email : window.getUPO().candidateEmail, form_type: formTypeVal.value, indicator_remote: !!document .querySelector("rhcl-checkbox") ?.hasAttribute("selected"), industry: industry ? industry : "", job_id: document.querySelector("#sfJoNumber") ? document.querySelector("#sfJoNumber").getAttribute("value") : "", job_type: window.getUPO().employmentType, job_title: window.getUPO().positionTitle, lob: document.querySelector("#lob") ? document.querySelector("#lob").getAttribute("value") : "", location: window.getUPO().postalCode, }; if (window.getUPO().isLoggedIn) { analyticObj["user_id_sfc"] = window.getUPO().contactSfID ? window.getUPO().contactSfID : ""; } rh_datalayer_add(analyticObj, "event"); } //Executive Search form if (formTypeVal && formTypeVal.value === "executive-search") { analyticObj = { tealium_event: "job_order_submit", datalayer_version: 2, event_action: "rhcl-button-clicked", event_text: document .querySelector("form rhcl-button") .getAttribute("component-tracking-label"), event_version: "executive search", form_email: window.getUPO().email ? window.getUPO().email : window.getUPO().candidateEmail, form_type: formTypeVal.value, job_title: window.getUPO().positionTitle, location: window.getUPO().postalCode, }; if (window.getUPO().isLoggedIn) { analyticObj["user_id_sfc"] = window.getUPO().contactSfID ? window.getUPO().contactSfID : ""; } rh_datalayer_add(analyticObj, "event"); } //Newsletter subscription form if (formTypeVal && formTypeVal.value === "newsletter-subscription") { analyticObj = { tealium_event: "newsletter_subscription_submit", datalayer_version: 2, event_action: "rhcl-button-clicked", event_text: document .querySelector("form rhcl-button") .getAttribute("component-tracking-label"), form_email: window.getUPO().email ? window.getUPO().email : window.getUPO().candidateEmail, form_type: formTypeVal.value, }; if (window.getUPO().isLoggedIn) { analyticObj["user_id_sfc"] = window.getUPO().contactSfID ? window.getUPO().contactSfID : ""; } rh_datalayer_add(analyticObj, "event"); } //Salary guide form if (formTypeVal && formTypeVal.value === "salary-guide") { let userType = ""; let checkBoxVal = document.querySelector("form rhcl-radio-group") ? document.querySelector("form rhcl-radio-group").value : ""; if (checkBoxVal === "yes") { userType = "client"; } else if (checkBoxVal === "no") { userType = "candidate"; } analyticObj = { tealium_event: "salary_guide_submit", datalayer_version: 2, event_action: "rhcl-button-clicked", event_text: document .querySelector("form rhcl-button") .getAttribute("component-tracking-label"), form_email: window.getUPO().email ? window.getUPO().email : window.getUPO().candidateEmail, form_type: formTypeVal.value, user_type: userType, }; if (window.getUPO().isLoggedIn) { analyticObj["user_id_sfc"] = window.getUPO().contactSfID ? window.getUPO().contactSfID : ""; } rh_datalayer_add(analyticObj, "event"); } //webmaster feedback form if (formTypeVal && formTypeVal.value === "webmaster-feedback") { analyticObj = { tealium_event: "feedback_submit", datalayer_version: 2, event_action: "rhcl-button-clicked", event_text: document .querySelector("form rhcl-button") .getAttribute("component-tracking-label"), form_type: formTypeVal.value, }; if (window.getUPO().isLoggedIn) { analyticObj["user_id_sfc"] = window.getUPO().contactSfID ? window.getUPO().contactSfID : ""; } rh_datalayer_add(analyticObj, "event"); console.log(analyticObj, "event"); } //client visit form if (formTypeVal && formTypeVal.value === "client-visit") { analyticObj = { tealium_event: "client_visit_submit", datalayer_version: 2, event_action: "rhcl-button-clicked", event_text: document .querySelector("form rhcl-button") .getAttribute("component-tracking-label"), event_version: projectTypeVal.value, form_type: formTypeVal.value, form_name: formTypeVal.name, form_email: window.getUPO().email ? window.getUPO().email : window.getUPO().candidateEmail, page_name: "", page_section: "", user_focus: "", user_state: window.getUPO().isLoggedIn ? "auth" : "unauth", }; if (window.getUPO().isLoggedIn) { analyticObj["user_id_sfc"] = window.getUPO().contactSfID ? window.getUPO().contactSfID : ""; } rh_datalayer_add(analyticObj, "event"); } //gated form if (formTypeVal && formTypeVal.value === "gated") { let visitorTypeValue = requestData.visitorType || document.querySelector( "form rhcl-radio-group[name='visitorType']" )?.value || ""; if ( visitorTypeValue === "" && document.getElementsByName("visitorType").length ) { visitorTypeValue = document.getElementsByName("visitorType")[0]?.value; } analyticObj = { tealium_event: "gated_submit", datalayer_version: 2, event_attr_01: visitorTypeValue, event_action: "rhcl-button-clicked", event_text: document .querySelector("form rhcl-button") .getAttribute("component-tracking-label"), event_version: projectTypeVal.value, form_type: formTypeVal.value, form_name: formTypeVal.name, form_email: window.getUPO().email ? window.getUPO().email : window.getUPO().candidateEmail, page_name: "", page_section: "", user_focus: "", user_state: window.getUPO().isLoggedIn ? "auth" : "unauth", }; if (window.getUPO().isLoggedIn) { analyticObj["user_id_sfc"] = window.getUPO().contactSfID ? window.getUPO().contactSfID : ""; } rh_datalayer_add(analyticObj, "event"); console.log(analyticObj, "event"); } //job order forms if ( formTypeVal && (formTypeVal.value === "job-order-no-rhd" || formTypeVal.value === "job-order-one-click") ) { analyticObj = { tealium_event: "job_order_submit", datalayer_version: 2, event_action: "rhcl-button-clicked", event_text: document .querySelector("form rhcl-button") .getAttribute("component-tracking-label"), form_type: formTypeVal.value, }; const hasEmail = Array.from( document.querySelectorAll("form rhcl-text-field") ).filter((ele) => { return ele.type === "email"; }); if (hasEmail.length) analyticObj["form_email"] = hasEmail[0].value; if (window.getUPO().isLoggedIn) { analyticObj["user_id_sfc"] = window.getUPO().contactSfID ? window.getUPO().contactSfID : ""; } rh_datalayer_add(analyticObj, "event"); } if ( formTypeVal && (formTypeVal.value === "candidate-referral" || formTypeVal.value === "email-us" || formTypeVal.value === "job-order-no-rhd" || formTypeVal.value === "job-order-one-click" || formTypeVal.value === "mobile-app-download" || formTypeVal.value === "candidate-work-history" || formTypeVal.value === "contact-us-aws" || formTypeVal.value === "contact-us") ) { analyticObj = { tealium_event: "form_submit", datalayer_version: 2, event_action: "rhcl-button-clicked", event_text: document .querySelector("form rhcl-button") .getAttribute("component-tracking-label"), form_type: formTypeVal.value, }; const hasEmail = Array.from( document.querySelectorAll("form rhcl-text-field") ).filter((ele) => { return ele.type === "email"; }); if (hasEmail.length) analyticObj["form_email"] = hasEmail[0].value; if (window.getUPO().isLoggedIn) { analyticObj["user_id_sfc"] = window.getUPO().contactSfID ? window.getUPO().contactSfID : ""; } rh_datalayer_add(analyticObj, "event"); } if (document.querySelector(".salary-guide") !== null) { form.nextElementSibling.style.display = "none"; saveGatingPropertyInUPO(); } } const displayCustomAlert = (message) => { const alertElement = document.querySelector(".form-container rhcl-alert:first"); alertElement.setAttribute("copy", message); alertElement.style.display = "block"; setTimeout(() => { const formContainer = document.querySelector(".form-container"); window.scrollTo({ top: formContainer.getBoundingClientRect() + formContainer.ownerDocument.defaultView.scrollY, behavior: "smooth", }); }, 500); }; const displayErrorMessage = (status, form) => { form.nextElementSibling.style.display = "none"; const alertEl = document.querySelector( ".form-container rhcl-alert[data-status='" + status + "']" ); if (alertEl) { alertEl.style.display = "block"; } scrollToTopOfForm(); } const displayDynamicErrorMessage = (fieldName) => { const fieldEl = document.querySelector(`.form-container *[name='${fieldName}']`); let errorMessage = fieldEl?.getAttribute("error-message-lp"); if (errorMessage && errorMessage.includes(fieldName)) { errorMessage = errorMessage.replace( `{${fieldName}}`, leadApiRequestObject[fieldName] ); } if (errorMessage && fieldEl) { fieldEl.customErrorMessage = errorMessage; fieldEl.customInvalid = true; } } const handleSuccessResponse = (response) => { // successful form submission event for adobe target (BOBA-5836) if (response?.requestMessageKey === "20_success" && !response?.request_message?.endsWith("#")) { const submissionEvent = new Event("formSubmittedSuccessfully"); document.dispatchEvent(submissionEvent); } if (successPopupStatus) handlePopupStatusSuccess(form, response); if (successEmailModalStatus) handleEmailModalSuccess(form); if (successRedirectStatus) handleShowRedirectStatusSuccess(form, thisInstance); } const handleErrorResponse = (response) => { const { status, request_message_Key } = response; if ([500, 502, 503, 504, "error"].includes(status)) { displayErrorMessage(status, form); return; } if (request_message_Key) { form.nextElementSibling.style.display = "none"; if (request_message_Key.length > 0) { if (request_message_Key.includes("20_validationFailed_postalCode")) { displayDynamicErrorMessage("postalCode"); } if (request_message_Key.includes("20_validationFailed_positionTitle")) { displayDynamicErrorMessage("positionTitle"); } scrollToTopOfForm(); } } handleDataValidationFailed(response, request_message_Key, form); } const cleanUpRecaptcha = () => { const recaptchaContainer = document.getElementById("grecaptcha-interactive"); if (recaptchaContainer) recaptchaContainer.remove(); recaptchaFlag = 0; delete leadApiRequestObject?.interactiveRecaptchaToken; delete candidateWorkHistory?.interactiveRecaptchaToken; delete newsApiObject?.interactiveRecaptchaToken; }; //Run POST fetch for all form requests const handleAllFetches = () => { const fetchWithRetry = (url, requestData, type, retries = 3) => { return fetch(url, { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify(requestData), }) .then((response) => { if (response.ok) { return response.json().then((data) => ({response, status: response.status, data, type})); } else if (retries > 0) { return fetchWithRetry(url, requestData, type, retries - 1); } else { console.log(`Max retries for the following submission endpoint: ${url}`); return { status: "error", data: null, error: "Max retries reached" }; } }) .catch((error) => { console.error(`Fetch error for ${url}:`, error); return { status: "error", data: null, error }; }); }; //Create each fetch request with specific payload for each request type (leads, nonleads,jobalerts) const fetchRequests = formActionUrlIterable.map(([type, url]) => { requestData = createRequestPayload(input, thisInstance, type); return fetchWithRetry(url, requestData, type); }); //Collect responses and handle responses for the POST request(s). Promise.all(fetchRequests) .then((responses) => { let fetchFailList = []; let fetchSuccessList = []; responses.forEach(({ response, status, data , type}) => { const requestMessageKey = data.request_message_key || data.request_message_Key; const requestMessage = data.request_message; if ((status === 200 || status === 202) && requestMessageKey === "20_success") { // Handle success paths if (document.querySelector("#showRedirectStatus")) { successRedirectStatus = true; } if (document.querySelector("#showRedirectAndPopupStatus")) { successRedirectStatus = true; successPopupStatus = true; } if (document.querySelector("#showPopupStatus")) { successPopupStatus = true; } if (document.querySelector("#email-model")) { successEmailModalStatus = true; } fetchSuccessList.push( { "type": type, "response": data } ) } else { fetchFailList.push( { "type": type, "response": data } ) handleDataValidationFailed( requestMessageKey, requestMessage, form); } }); if (fetchFailList.length > 0) { const hasFailMarketing = fetchFailList.some(item => item.type === "nonLeads"); const hasSuccessLeads = fetchSuccessList.some(item => item.type === "leads"); //In scenario where leads AND nonleads are called we set success if leads is the only successful call if (hasFailMarketing && hasSuccessLeads) { if (typeof fetchSuccessList[0].response.request_message_Key !== "string" && fetchSuccessList[0].response.request_message_Key !== "20_success" ) { return; } handleSuccessResponse(fetchSuccessList[0].response); } else { handleErrorResponse(fetchFailList[0].response, form); } } else { // Handle each success scenarios after all responses are processed handleSuccessResponse(fetchSuccessList[0].response); } handleFormTypeAnalytics(); }) .catch((error) => { console.error("Error handling fetch requests:", error); displayErrorMessage("error", form); }); }; handleAllFetches(); } window.ready(function () { document .querySelectorAll(".form-submit-btn rhcl-button") .forEach(function (el) { el.addEventListener("click", function (e) { e.preventDefault(); recaptchaStatus(); getLeadId(); setTimeout(getSubmissionDate, 2000); let thisInstance = this; let form = this.closest("form"); if (!form.closest(".salary-guide")) { localStorage.removeItem("redirectionUrl"); } var inputElements = form.querySelectorAll("[rhcl-input]"); var dateElements = form.querySelectorAll("rhcl-datepicker"); let validateFieldArray = [...inputElements, ...dateElements]; setFormActionUrls(); validateForm(validateFieldArray, thisInstance, form); if (document.querySelectorAll(".salary-guide").length > 0) { updateHiddenFields(); } }); }); document.querySelectorAll(".form-btn rhcl-button").forEach(function (el) { el.addEventListener("click", function (e) { e.preventDefault(); const thisInstance = this; var form = document.querySelector(".form-btn") ? document.querySelector(".form-btn").closest("form") : null; var inputElements = form ? form.querySelectorAll("[rhcl-input]") : []; let validateFieldArray = Array.from(inputElements); setFormActionUrls(); validateForm(validateFieldArray, thisInstance, form); recaptchaStatus(); }); }); }); function getPostalCodeInForm() { return document.querySelector("rhcl-text-field[name='postalCode']"); } function setFormActionUrls() { const formActionUrls = document.querySelector(".form-btn") ? document.querySelector(".form-btn").closest("form").getAttribute("data-attribute-endpoints") : document .querySelector(".form-submit-btn") .closest("form") .getAttribute("data-attribute-endpoints"); const formActionUrlMap = JSON.parse(formActionUrls); formActionUrlIterable = Object.entries(formActionUrlMap); } function isCountryUS() { var country = document.getElementById("country"); return country && country.hasAttribute("value") && country.value === "US"; } function isPostalCodeInvalidForUS(value) { return ( value.match(/^(82[0-9]{3}|83[0-3][0-9]{2}|8341[0-4])$/) || value.match( /^(995[0-9]{2}|996[0-9]{2}|997[0-9]{2}|998[0-9]{2}|999[0-4][0-9]|99950)$/ ) || value.match( /^(24[7-9][0-9]{2}|25[0-9]{3}|26[0-7][0-9]{2}|268[0-7][0-9]|2688[0-6])$/ ) ); } function getPostalCodeErrorValidity() { var postalCodeField = getPostalCodeInForm(); var value = postalCodeField.value; if (!postalCode || !isCountryUS()) { return false; } const isInvalid = isPostalCodeInvalidForUS(value); var initialMessage = postalCodeField.getAttribute("custom-error-message"); if (isInvalid) { initialMessage = `Robert Half cannot support staffing needs in ${value} at this time.`; postalCodeField.setAttribute("custom-invalid", ""); postalCodeField.setAttribute("custom-error-message", initialMessage); } else { postalCodeField.removeAttribute("custom-invalid"); postalCodeField.removeAttribute("custom-error-message"); } return isInvalid; } var postalCode = getPostalCodeInForm(); if (postalCode) { postalCode.addEventListener("rhcl-text-field-blur", function (e) { if (isCountryUS()) { let isValid = true; const promises = []; postalCode.removeAttribute("custom-invalid"); postalCode.customInvalid = null; promises.push(postalCode.validate()); Promise.allSettled(promises).then((results) => { results.forEach((result) => { if (result.status === "fulfilled") { if (!result.value) { isValid = false; } } }); if (isValid) { getPostalCodeErrorValidity(); } }); } }); if ( getURLParameter("postalCode") != "" || getURLParameter("postalCode") != null || getURLParameter("postalCode") != undefined ) { var postalCodecount = 0; document .querySelector(".form-container rhcl-text-field[name='postalCode']") .addEventListener("rhcl-text-field-changed", function (e) { var patternId = document.querySelector("#rhFormTextField"); var pattern = ""; var patternMessage = ""; if (patternId) { pattern = patternId.hasAttribute("data-pattern") ? patternId.getAttribute("data-pattern") : ""; patternMessage = patternId.hasAttribute("data-errorMessage") ? patternId.getAttribute("data-errorMessage") : ""; } let isValid = true; const promises = []; document .querySelector("rhcl-text-field[name='postalCode']") .removeAttribute("custom-invalid"); document.querySelector( "rhcl-text-field[name='postalCode']" ).customInvalid = null; promises.push( document .querySelector("rhcl-text-field[name='postalCode']") .validate() ); Promise.allSettled(promises).then((results) => { results.forEach((result) => { if (result.status === "fulfilled") { if (!result.value) { isValid = false; } } }); if (isValid) { postalCodecount += 1; if (postalCodecount < 2 && this.value) { const value = this.value; if (pattern && value.match(pattern) === null) { this.setAttribute("custom-invalid", ""); } else { this.removeAttribute("custom-invalid"); } this.setAttribute("custom-error-message", patternMessage); } } }); }); } } function getEmailField() { return document.querySelector('[id^="rhcl-text-field"][type="email"]'); } if ( document.querySelector("rhcl-datepicker[name='startDate']") && document.querySelector("rhcl-datepicker[name='endDate']") ) { document .querySelector("rhcl-datepicker[name='endDate']") .addEventListener("rhcl-calendar-change", (e) => { let isValid = true; const promises = []; document .querySelector("rhcl-datepicker[name='endDate']") .removeAttribute("custom-invalid"); document.querySelector("rhcl-datepicker[name='endDate']").customInvalid = null; document .querySelector("rhcl-datepicker[name='endDate']") .labelRef.removeAttribute("custom-invalid"); promises.push( document.querySelector("rhcl-datepicker[name='endDate']").validate() ); Promise.allSettled(promises).then((results) => { results.forEach((result) => { if (result.status === "fulfilled") { if (!result.value) { isValid = false; } } }); if (isValid) { const formName = document.querySelector( "input[name='formName']" ).value; if (formName && formName.includes("candidate_work_history")) { const startDate = document.querySelector( "rhcl-datepicker[name='startDate']" ); const endDate = document.querySelector( "rhcl-datepicker[name='endDate']" ); const errorMsg = endDate.hasAttribute("data-custom-error-message") ? endDate.getAttribute("data-custom-error-message") : ""; var initialMessage = endDate.getAttribute("custom-error-message"); endDate.removeAttribute("custom-invalid"); endDate.labelRef.removeAttribute("custom-invalid"); var flag = 0; if (new Date(startDate.value) >= new Date(endDate.value)) { flag = 1; if (errorMsg) { initialMessage = errorMsg; } else { initialMessage = "Start Date can not be greater than End Date"; } } if (flag === 1) { endDate.setAttribute("custom-invalid", ""); endDate.labelRef.setAttribute("custom-invalid", ""); } else { endDate.removeAttribute("custom-invalid"); endDate.labelRef.removeAttribute("custom-invalid"); } endDate.setAttribute("custom-error-message", initialMessage); } } }); }); document .querySelector("rhcl-datepicker[name='startDate']") .addEventListener("rhcl-calendar-change", (e) => { let isValid = true; const promises = []; if (document.querySelector("rhcl-datepicker[name='endDate']").value) { document .querySelector("rhcl-datepicker[name='endDate']") .removeAttribute("custom-invalid"); document.querySelector( "rhcl-datepicker[name='endDate']" ).customInvalid = null; document .querySelector("rhcl-datepicker[name='endDate']") .labelRef.removeAttribute("custom-invalid"); promises.push( document.querySelector("rhcl-datepicker[name='endDate']").validate() ); Promise.allSettled(promises).then((results) => { results.forEach((result) => { if (result.status === "fulfilled") { if (!result.value) { isValid = false; } } }); if (isValid) { var startDate = document.querySelector( "rhcl-datepicker[name='startDate']" ); var endDate = document.querySelector( "rhcl-datepicker[name='endDate']" ); const errorMsg = endDate.hasAttribute("data-custom-error-message") ? endDate.getAttribute("data-custom-error-message") : ""; var initialMessage = endDate.getAttribute("custom-error-message"); endDate.removeAttribute("custome-invalid"); endDate.labelRef.setAttribute("custom-invalid", ""); var flag = 0; if ( endDate.value && new Date(startDate.value) > new Date(endDate.value) ) { flag = 1; if (errorMsg) { initialMessage = errorMsg; } else { initialMessage = "Start Date can not be greater than End Date"; } } if (flag === 1) { endDate.setAttribute("custom-invalid", ""); endDate.labelRef.setAttribute("custom-invalid", ""); } else { endDate.removeAttribute("custom-invalid"); endDate.labelRef.removeAttribute("custom-invalid"); } endDate.setAttribute("custom-error-message", initialMessage); } }); } }); } if (document.querySelector("rhcl-checkbox[name='currentEmployer']")) { document .querySelector("rhcl-checkbox[name='currentEmployer']") .addEventListener("rhcl-checkbox-changed", () => { const formName = document.querySelector("input[name='formName']").value; if (formName && formName.includes("candidate_work_history")) { const currEmp = document.querySelector( "rhcl-checkbox[name='currentEmployer']" ).selected; const endDate = document.querySelector( "rhcl-datepicker[name='endDate']" ); if (currEmp && endDate) { endDate.setAttribute("disabled", ""); endDate.setAttribute("date", ""); endDate.style.pointerEvents = "none"; endDate.style.opacity = 0.6; endDate.hasAttribute("custom-invalid") ? endDate.removeAttribute("custom-invalid") : ""; } else { endDate.removeAttribute("disabled"); endDate.style.pointerEvents = "unset"; endDate.style.opacity = 1; } } }); } function updateHiddenFields() { var pagePath = new URL(window.location); pagePath = pagePath.pathname.replace("/content/roberthalf", ""); var country = pagePath.split("/")[1]; var language = pagePath.split("/")[2]; if ( businessUnit.hasOwnProperty(country) && country != undefined && language != undefined ) { var formName = "form_" + businessUnit[country] + "_" + country + "_" + language + "_salary_guide_gating"; if (document.querySelector("input[name='formName']") != null) { document.querySelector("input[name='formName']").value = formName; } if (document.querySelector("input[name='language']") != null) { document.querySelector("input[name='language']").value = language.toUpperCase(); } if (document.querySelector("input[name='countryCode']") != null) { document.querySelector("input[name='countryCode']").value = country.toUpperCase(); } if (document.querySelector("input[name='salaryGuideYear']") != null) { document.querySelector("input[name='salaryGuideYear']").value = new Date().getFullYear(); } } } function createRequestPayload(input, thisInstance, endpointType) { let unifiedProfileObject; var hiddenInput = thisInstance .closest("form") .querySelectorAll("input[type=hidden]"); var dates = document.querySelectorAll("form rhcl-datepicker"); if (localStorage.getItem("unifiedProfileObject") != null) { unifiedProfileObject = window.getUPO(); } const inputArray = [...input, ...hiddenInput, ...dates]; if ( endpointType === "jobAlerts" ) { let inputValues = { searchTerms: "", emailAddress: "", location: "", country: "", language: "", }; for (const element in inputArray) { inputValues = retrieveJobAlertsInputFields( inputArray[element], inputValues ); } updateJobAlertDetails(inputValues); return jobAlertRequestObject; } else { for (const element in inputArray) { if ( inputArray[element].tagName.toLocaleLowerCase() != "rhcl-checkbox" && inputArray[element].tagName.toLocaleLowerCase() != "rhcl-radio" && inputArray[element].tagName.toLocaleLowerCase() != "rhcl-datepicker" ) { if (inputArray[element].value != undefined) { var noStringsInput = inputArray[element].value.replace(/["']/g, ""); leadApiRequestObject[inputArray[element].name] = noStringsInput; if ( document.querySelector("[data-attribute-iz]") != null && inputArray[element].tagName.toLocaleLowerCase() === "rhcl-radio-group" ) { if (inputArray[element].value.toLocaleLowerCase() === "client") { newsApiObject["newsClient"] = "True"; newsApiObject["newsCandidate"] = "False"; } else if ( inputArray[element].value.toLocaleLowerCase() === "candidate" ) { newsApiObject["newsClient"] = "False"; newsApiObject["newsCandidate"] = "True"; } } else { newsApiObject[inputArray[element].name] = inputArray[element].value; candidateWorkHistory[inputArray[element].name] = inputArray[element].value; } if (unifiedProfileObject != null) { if (inputArray[element].name in unifiedProfileObject) { if (inputArray[element].name === "email") { unifiedProfileObject["emailAddress"] = inputArray[element].value; } else if (inputArray[element].name === "emailAddress") { unifiedProfileObject["email"] = inputArray[element].value; } else if (inputArray[element].name === "fullName") { unifiedProfileObject["fullName"] = inputArray[element].value; } else if (inputArray[element].name === "officeInfo") { unifiedProfileObject["officeInfo"] = inputArray[element].value; } else if (inputArray[element].name === "businessPhone") { unifiedProfileObject["businessPhone"] = inputArray[element].value; } unifiedProfileObject[inputArray[element].name] = inputArray[element].value; if ( unifiedProfileObject.peopleNumber != "" && endpointType === "leads" ) { leadApiRequestObject["peopleNumber"] = unifiedProfileObject.peopleNumber; } if (unifiedProfileObject.contactSfID != "") { newsApiObject["sfContactID"] = unifiedProfileObject.contactSfID; } } if (unifiedProfileObject.contactSfID != "") { candidateWorkHistory["subscriberKey"] = unifiedProfileObject.contactSfID; } } if ( !leadApiRequestObject.rhInternalTrackingType || leadApiRequestObject.rhInternalTrackingType === "Not found" ) { // if the tracking type isn't already set by an ad campaign url leadApiRequestObject["rhInternalTrackingType"] = unifiedProfileObject.isLoggedIn ? "LUX" : "RH Website Visitor"; } } } if ( inputArray[element].tagName.toLocaleLowerCase() === "rhcl-datepicker" ) { if (inputArray[element].value === "") { candidateWorkHistory[inputArray[element].name] = ""; } else { candidateWorkHistory[inputArray[element].name] = changeDateFormat( inputArray[element].value ); } } } var radioValue = document.querySelectorAll("form rhcl-radio:checked"); if (radioValue != null) { radioValue.forEach(function (element) { leadApiRequestObject[element.name] = element.value; newsApiObject[element.name] = element.value; candidateWorkHistory[element.name] = element.value; if (unifiedProfileObject != null) { if (element.name in unifiedProfileObject) { unifiedProfileObject[element.name] = element.value; } } }); } if ( document.querySelectorAll("[data-attribute-iz]").length > 0 && "radioButton" in newsApiObject ) { delete newsApiObject.radioButton; } if ( document.querySelectorAll("[data-attribute-iz]").length > 0 && "radioButtons" in newsApiObject ) { delete newsApiObject.radioButtons; } if ("formType" in newsApiObject) { delete newsApiObject.formType; } var checkboxValue = document.querySelectorAll("form rhcl-checkbox"); if (checkboxValue.length > 0) { checkboxValue.forEach(function (element) { if (element.selected === true) { if (element.name != null) { leadApiRequestObject[element.name] = element.value || "true"; newsApiObject[element.name] = element.value || "true"; candidateWorkHistory[element.name] = element.value || "true"; if (unifiedProfileObject != null) { if (element.name in unifiedProfileObject) { unifiedProfileObject[element.name] = element.value || "true"; } } } } else { if (leadApiRequestObject.hasOwnProperty(element.name)) { delete leadApiRequestObject[element.name]; } leadApiRequestObject[element.name] = "false"; newsApiObject[element.name] = element.value || "false"; candidateWorkHistory[element.name] = element.value || "false"; } }); } if (unifiedProfileObject != null) { window.setUPO(unifiedProfileObject); } if (document.querySelectorAll(".form-btn").length > 0) { return newsApiObject; } if ( document.querySelectorAll("input[name='formName']").length > 0 && document.querySelectorAll("input[name='formName']").value === "form_na_candidate_work_history" ) { return candidateWorkHistory; } return leadApiRequestObject; } function changeDateFormat(inputDate) { if (inputDate) { var splitDate = inputDate.split("-"); if (splitDate.count === 0) { return null; } var year = splitDate[0]; var month = splitDate[1]; var day = splitDate[2]; return month + "-" + day + "-" + year; } else { return ""; } } function retrieveJobAlertsInputFields(inputElement, inputValues) { if (inputElement.name === null) { return inputValues; } if (inputElement.name.toLocaleLowerCase() === "searchterms") { inputValues.searchTerms = inputElement.value || ""; } if (inputElement.name.toLocaleLowerCase() === "email") { inputValues.emailAddress = inputElement.value || ""; } if (inputElement.name.toLocaleLowerCase() === "location") { inputValues.location = inputElement.value || ""; } return inputValues; } function updateJobAlertDetails(inputValues) { let pagePath = new URL(window.location); pagePath = pagePath.pathname.replace("/content/roberthalf", ""); if (pagePath) { inputValues.country = pagePath.split("/")[1]; inputValues.language = pagePath.split("/")[2]; } jobAlertRequestObject.candidateEmailAddress = inputValues.emailAddress; jobAlertRequestObject.keywords = inputValues.searchTerms; jobAlertRequestObject.keywordsNoSpaces = inputValues.searchTerms.replace( /\s+/g, "" ); jobAlertRequestObject.location = inputValues.location; jobAlertRequestObject.locationNoSpaces = inputValues.location.replace( /\s+/g, "" ); jobAlertRequestObject.locale = inputValues.language.toLowerCase() + "_" + inputValues.country.toUpperCase(); jobAlertRequestObject.countryCode = inputValues.country.toLowerCase(); jobAlertRequestObject.insrtDttmHist = new Date().toISOString(); jobAlertRequestObject.subscriptionSourceUrl = window.location.href; jobAlertRequestObject.searchResultsUrl = window.location.origin + "/" + inputValues.country.toLowerCase() + "/" + inputValues.language.toLowerCase() + "/jobs/" + inputValues.location.replace(/ /g, "-") + "/" + encodeURIComponent(inputValues.searchTerms); const randomString = Math.random().toString(36).slice(2, 12); const timestamp = Date.now().toString().slice(-10); jobAlertRequestObject.jobAlertsSubscriptionId = `${randomString}_${timestamp}`; } } window.verifyCallback = function verifyCallback(response) { recaptchaFlag = 1; leadApiRequestObject["interactiveRecaptchaToken"] = response; candidateWorkHistory["interactiveRecaptchaToken"] = response; newsApiObject["interactiveRecaptchaToken"] = response; if (leadApiRequestObject.hasOwnProperty("invisibleRecaptchaToken")) { delete leadApiRequestObject.invisibleRecaptchaToken; } if (candidateWorkHistory.hasOwnProperty("invisibleRecaptchaToken")) { delete candidateWorkHistory.invisibleRecaptchaToken; } if (newsApiObject.hasOwnProperty("invisibleRecaptchaToken")) { delete newsApiObject.invisibleRecaptchaToken; } }; function showInteractiveReCaptcha() { recaptchaFlag = 1; var key = document.querySelectorAll(".form-btn").length > 0 ? document .querySelector(".form-btn rhcl-button") .getAttribute("interactive-key") : document .querySelector(".form-submit-btn rhcl-button") .getAttribute("interactive-key"); // Create the interactive reCAPTCHA HTML var recaptchaContainer = document.createElement("span"); recaptchaContainer.id = "grecaptcha-interactive"; recaptchaContainer.className = "g-recaptcha"; recaptchaContainer.setAttribute("data-sitekey", key); recaptchaContainer.setAttribute("data-callback", "verifyCallback"); recaptchaContainer.setAttribute("theme", "light"); var formGeneral = document.querySelector(".form-submit-btn"); var formNews = document.querySelector(".form-btn"); if (formGeneral != null) { document .querySelector(".form-submit-btn") .insertBefore( recaptchaContainer, document.querySelector(".form-submit-btn").firstChild ); } if (formNews != null) { document .querySelector(".form-btn") .insertBefore( recaptchaContainer, document.querySelector(".form-btn").firstChild ); } // Render the interactive reCAPTCHA grecaptcha.render(recaptchaContainer, { sitekey: key, }); //ajax call in which we will get the score //passes } function validateRecaptcha(input, thisInstance, form) { var key = document.querySelectorAll(".form-btn").length > 0 ? document .querySelector(".form-btn rhcl-button") .getAttribute("invisible-key") : document .querySelector(".form-submit-btn rhcl-button") .getAttribute("invisible-key"); grecaptcha.enterprise.ready(function () { grecaptcha.enterprise .execute(key, { action: "click", }) .then(function (token) { leadApiRequestObject["invisibleRecaptchaToken"] = token; candidateWorkHistory["invisibleRecaptchaToken"] = token; newsApiObject["invisibleRecaptchaToken"] = token; ajaxCall(input, thisInstance, form); }); }); } async function validateForm(input, thisInstance, form) { let isValid = true; const fieldsToValidate = input; const promises = []; var flag = 1; fieldsToValidate.forEach((elem) => { if ( typeof elem.validate === "function" && !elem.getAttribute("form-submission-hidden") ) { promises.push(elem.validate()); } }); // wait for all promises to be finished await Promise.allSettled(promises).then(async (results) => { results.forEach((result) => { if (result.status === "fulfilled") { if (!result.value) { isValid = false; } } }); const parameters = getURLParameters(); var params = Object.keys(parameters); flag = getByPassStatus(params); var postalCode = getPostalCodeInForm(); if (isValid && postalCode && isCountryUS()) { const isPostalCodeInvalid = getPostalCodeErrorValidity(); if (isPostalCodeInvalid) { isValid = false; } } // getEmailField and email valid functions are written in emailValidation.html file. var emailField = getEmailField(); if ( isValid && emailField ) { //If leads Submission we want to force validation on email field let isLeadsSubmission = false; //check if form is set to submit with leads endpoint formActionUrlIterable.forEach(([key]) => { if (key === "leads") { isLeadsSubmission = true; } }); //here we will make the call to validate email field if the field is // authored for validation or the submission is to leads if ( window.shouldCheckEmailValidation && typeof window.shouldCheckEmailValidation === "function" && shouldCheckEmailValidation(emailField.value, isLeadsSubmission) ) { emailField.removeAttribute("custom-invalid"); emailField.customInvalid = null; const isEmailCustomValid = checkEmailValidityForCustomDomains( emailField.value ); if (!isEmailCustomValid) { isValid = false; } setEmailCustomErrorMessage(isLeadsSubmission); if (isValid) { // check email for candidate restricted emails document.querySelector("#backdrop").style.display = "block"; await window.ssjoCandidateEmailCheck(isLeadsSubmission); document.querySelector("#backdrop").style.display = "none"; if (emailField.customInvalid) { isValid = false; } } } } if (isValid) { form.nextElementSibling.style.display = "block"; if (test && flag) { if (recaptchaFlag === 0) { validateRecaptcha(input, thisInstance, form); } else ajaxCall(input, thisInstance, form); } if (!test && !flag) { ajaxCall(input, thisInstance, form); } if (test && !flag) { ajaxCall(input, thisInstance, form); } if (!test && flag) { ajaxCall(input, thisInstance, form); } } }); } function recaptchaStatus() { var flag = 1; const parameters = getURLParameters(); var params = Object.keys(parameters); flag = getByPassStatus(params); if (test) { leadApiRequestObject["recaptchaEnabled"] = "true"; newsApiObject["recaptchaEnabled"] = "true"; candidateWorkHistory["recaptchaEnabled"] = "true"; } else { leadApiRequestObject["recaptchaEnabled"] = "false"; newsApiObject["recaptchaEnabled"] = "false"; candidateWorkHistory["recaptchaEnabled"] = "false"; } if (!flag) { leadApiRequestObject["recaptchaEnabled"] = "false"; leadApiRequestObject[bypassPerimeter] = parameters[bypassPerimeter]; newsApiObject["recaptchaEnabled"] = "false"; newsApiObject[bypassPerimeter] = parameters[bypassPerimeter]; candidateWorkHistory["recaptchaEnabled"] = "false"; candidateWorkHistory[bypassPerimeter] = parameters[bypassPerimeter]; } } function getLeadId() { if (document.querySelector("#leadId") != null) { var leadId = crypto.randomUUID(); var leadIdArray = [...document.querySelectorAll("#leadId")]; leadIdArray.forEach(function (ele) { ele.value = "rhwebsite_" + leadId; }); } } /*************************** Salary Guide Gating Logic*********************************************/ window.ready(function () { if (document.querySelector(".salary-guide") != null) { var currentUrl = new URL(window.location); if (currentUrl.pathname.includes(".html")) { var urlString = currentUrl.pathname.split("."); currentUrl = urlString[0]; } else { currentUrl = currentUrl.pathname; } if ( currentUrl.endsWith("salary-guide") || currentUrl.endsWith("guide-salarial") || currentUrl.endsWith("gehaltsuebersicht") || currentUrl.endsWith("salarisgids") || currentUrl.endsWith("guide-des-salaires") || currentUrl.endsWith("guia-salarial") ) { if (localStorage.getItem("unifiedProfileObject") != null) { var upo = window.getUPO(); var cookie = getCookie("wcmmode"); const gatingPropertyEl = document.querySelector(".gating-properties"); if (gatingPropertyEl != null && cookie != "edit") { var gatingproperty = gatingPropertyEl.getAttribute("gatingproperty") !== undefined ? gatingPropertyEl.getAttribute("gatingproperty") : "sgGatingFormSubmitted"; if (upo.hasOwnProperty(gatingproperty)) { var redirecturl = gatingPropertyEl.getAttribute("gatedredirect") != undefined ? gatingPropertyEl.getAttribute("gatedredirect") : ""; if (redirecturl != "") { window.location.replace(redirecturl); } } } } } } }); function checkQueryString(field) { var url = window.location.href; if (url.indexOf("?" + field + "=") != -1) { return true; } else if (url.indexOf("&" + field + "=") != -1) { return true; } return false; } function getURLParameter(sParam) { var sPageURL = new URL(window.location); sPageURL = sPageURL.search.substring(1); var sURLVariables = sPageURL.split("&"); for (var i = 0; i < sURLVariables.length; i++) { var sParameterName = sURLVariables[i].split("="); if (sParameterName[0] === sParam) { return sParameterName[1]; } } } //current date and time in format YYYY-MM-DD HH:MM:SS function currentDateTime() { var d = new Date(); d = d.getFullYear() + "-" + (d.getMonth() + 1 < 10 ? "0" + (d.getMonth() + 1) : d.getMonth() + 1) + "-" + (d.getDate() < 10 ? "0" + d.getDate() : d.getDate()) + " " + (d.getHours() < 10 ? "0" + d.getHours() : d.getHours()) + ":" + (d.getMinutes() < 10 ? "0" + d.getMinutes() : d.getMinutes()) + ":" + (d.getSeconds() < 10 ? "0" + d.getSeconds() : d.getSeconds()); return d; } function getSubmissionDate() { if (document.querySelector("#submissionDateTime") != null) { document.querySelector("#submissionDateTime").value = currentDateTime(); } if (document.querySelector("#submissionDate") != null) { document.querySelector("#submissionDate").value = currentDateTime(); } } window.ready(function () { /***************************on focus analytics*********************************************/ var refreshCount = 0; document.querySelector(".form-container [rhcl-input][required]") && document .querySelector(".form-container [rhcl-input][required]") .addEventListener("focus", () => { refreshCount += 1; var formTypeVal = document.querySelector( ".rhformhiddenfield input[name=formType]" ); var analyticObj = { tealium_event: "focus_click", datalayer_version: 2, event_action: "focus", event_text: document .querySelector(".form-container [rhcl-input][required]") .getAttribute("name"), form_type: formTypeVal?.value ? formTypeVal?.value : "", }; if (window.getUPO().isLoggedIn) { analyticObj["user_id_sfc"] = window.getUPO().contactSfID ? window.getUPO().contactSfID : ""; } if (refreshCount < 2) { rh_datalayer_add(analyticObj, "event"); } }); }); }()) </script> <!-- Conditional form routing data --> <form action="https://prd-dr.lp.api.roberthalfonline.com/proxy-lead-processing/send" class="form-container" data-attribute-ssjo="leads"> <span type="hidden" id="bypassToken" name="bypassToken" value="bypassToken"></span> <rhcl-alert hidden data-status="500" copy="Our system temporarily timed out. Please try again in a few minutes or contact us if the issue persists." headline="Error!"></rhcl-alert> <rhcl-alert hidden data-status="502" copy="Our system temporarily timed out. Please try again in a few minutes or contact us if the issue persists." headline="Error!"></rhcl-alert> <rhcl-alert hidden data-status="503" copy="Our system temporarily timed out. Please try again in a few minutes or contact us if the issue persists." headline="Error!"></rhcl-alert> <rhcl-alert hidden data-status="504" copy="Our system temporarily timed out. Please try again in a few minutes or contact us if the issue persists." headline="Error!"></rhcl-alert> <rhcl-alert hidden data-status="error" headline="Error!"></rhcl-alert> <rhcl-alert hidden data-status="positionTitleError" copy="Sorry, we don’t staff the role of {positionTitle} at this time." headline="Error!"></rhcl-alert> <rhcl-alert hidden data-status="postalCodeError" copy="Robert Half cannot support staffing needs in {postalCode} at this time." headline="Error!"></rhcl-alert> <div class="root container-fluid cmp-container"> <div class="form-field-set row"> <div class="field-set-header"> <rhcl-heading modifier="" tag="h2" theme="" variant="display5">Concernant la fonction</rhcl-heading> </div> <div class="field-element-row col-md-12"> <div class="row"> <div class="col-md-6 field-element-col"> <div class="aem-Grid aem-Grid--12 aem-Grid--default--12 "> <div class="root container-fluid cmp-container aem-GridColumn aem-GridColumn--default--12"> <rhcl-dropdown label="Spécialisation" required size="small" theme="concrete" name="specialization"> <rhcl-dropdown-item slot="item" value="Administration, RH et service client"> Administration, RH et service client </rhcl-dropdown-item> <rhcl-dropdown-item slot="item" value="Executive search"> Executive search </rhcl-dropdown-item> <rhcl-dropdown-item slot="item" value="Finance et comptabilité"> Finance et comptabilité </rhcl-dropdown-item> <rhcl-dropdown-item slot="item" value="IT"> IT </rhcl-dropdown-item> <rhcl-dropdown-item slot="item" value="Juridique"> Juridique </rhcl-dropdown-item> <rhcl-dropdown-item slot="item" value="Management resources"> Management resources </rhcl-dropdown-item> </rhcl-dropdown> </div> </div> </div> <div class="col-md-6 field-element-col"> <div class="aem-Grid aem-Grid--12 aem-Grid--default--12 "> <div class="rhformtext text aem-GridColumn aem-GridColumn--default--12"> <rhcl-text-field id="rhcl-text-field--47843310" label="Intitulé du poste recherché" type="text" required min-length="2" min-length-message="Intitulé du poste recherché doit comporter au moins 2 caractères." size="small" theme="concrete" name="positionTitle"> </rhcl-text-field> <script> var element = document.getElementById("rhcl-text-field--47843310"); element.addEventListener("rhcl-text-field-changed", function(){this.value=this.value.trim();}); </script> <script> window.ready(() => { window.addEventListener("rhcl-text-field-blur", e => { const textField = e.target textField.customInvalid = null; textField.customErrorMessage = null; }) }) </script></div> </div> </div> <div class="col-md-6 field-element-col"> <div class="aem-Grid aem-Grid--12 aem-Grid--default--12 "> <div class="root container-fluid cmp-container aem-GridColumn aem-GridColumn--default--12"> <rhcl-dropdown label="Type de fonction" required error-message="Veuillez sélectionner un type de fonction" size="small" theme="concrete" name="employmentType"> <rhcl-dropdown-item slot="item" value="temp"> Talent temporaire </rhcl-dropdown-item> <rhcl-dropdown-item slot="item" value="perm"> Talent permanent </rhcl-dropdown-item> <rhcl-dropdown-item slot="item" value="rhes"> Retained Executive Search </rhcl-dropdown-item> </rhcl-dropdown> </div> </div> </div> <div class="col-md-6 field-element-col"> <div class="aem-Grid aem-Grid--12 aem-Grid--default--12 "> <div class="root container-fluid cmp-container aem-GridColumn aem-GridColumn--default--12"> <rhcl-dropdown label="Choisissez le bureau plus proche" required size="small" theme="concrete" name="clientSelectedBranchName"> <rhcl-dropdown-item slot="item" value="Anvers"> Anvers </rhcl-dropdown-item> <rhcl-dropdown-item slot="item" value="Bruxelles"> Bruxelles </rhcl-dropdown-item> <rhcl-dropdown-item slot="item" value="Diegem"> Diegem </rhcl-dropdown-item> <rhcl-dropdown-item slot="item" value="Gand"> Gand </rhcl-dropdown-item> <rhcl-dropdown-item slot="item" value="Grand-Bigard"> Grand-Bigard </rhcl-dropdown-item> <rhcl-dropdown-item slot="item" value="Hasselt"> Hasselt </rhcl-dropdown-item> <rhcl-dropdown-item slot="item" value="Herentals"> Herentals </rhcl-dropdown-item> <rhcl-dropdown-item slot="item" value="Liège"> Liège </rhcl-dropdown-item> <rhcl-dropdown-item slot="item" value="Luxembourg"> Luxembourg </rhcl-dropdown-item> <rhcl-dropdown-item slot="item" value="Nivelles"> Nivelles </rhcl-dropdown-item> <rhcl-dropdown-item slot="item" value="Roulers"> Roulers </rhcl-dropdown-item> <rhcl-dropdown-item slot="item" value="Wavre"> Wavre </rhcl-dropdown-item> </rhcl-dropdown> </div> </div> </div> <div class="col-md-12 field-element-col"> <div class="aem-Grid aem-Grid--12 aem-Grid--default--12 "> <div class="root container-fluid cmp-container aem-GridColumn aem-GridColumn--default--12"> <rhcl-checkbox name="remoteEligible" size="small"> <label slot="label">Je souhaite recevoir plus d’informations sur le recrutement de collaborateurs en télétravail</label> </rhcl-checkbox> </div> </div> </div> <div class="col-md-12 field-element-col"> <div class="aem-Grid aem-Grid--12 aem-Grid--default--12 "> <div class="rhformtextarea textarea aem-GridColumn aem-GridColumn--default--12"> <rhcl-textarea size="small" theme="concrete" label="Description du poste" name="comments"> </rhcl-textarea> </div> </div> </div> <div class="col-md-12 field-element-col"> <div class="aem-Grid aem-Grid--12 aem-Grid--default--12 "> </div> </div> </div> </div> </div> </div> <div class="root container-fluid cmp-container"> <div class="form-field-set row"> <div class="field-set-header"> <rhcl-heading modifier="" tag="h2" theme="" variant="display5">Comment pouvons-nous vous contacter ?</rhcl-heading> </div> <div class="field-element-row col-md-12"> <div class="row"> <div class="col-md-6 field-element-col"> <div class="aem-Grid aem-Grid--12 aem-Grid--default--12 "> <div class="rhformtext text aem-GridColumn aem-GridColumn--default--12"> <rhcl-text-field id="rhcl-text-field--355824316" label="Prénom" type="text" required min-length="2" min-length-message="Prénom doit comporter au moins 2 caractères." pattern="[a-zA-ZàèìòùÀÈÌÒÙáéíóúýÁÉÍÓÚÝâêîôûÂÊÎÔÛãñõÃÑÕäëïöüÿÄËÏÖÜŸçÇßØøÅåÆæœ]+(?:(?:\. |[\-' ])[a-zA-ZàèìòùÀÈÌÒÙáéíóúýÁÉÍÓÚÝâêîôûÂÊÎÔÛãñõÃÑÕäëïöüÿÄËÏÖÜŸçÇßØøÅåÆæœ]+)*" format-message="Veuillez saisir un Prénom valide" size="small" theme="concrete" name="firstName"> </rhcl-text-field> <script> var element = document.getElementById("rhcl-text-field--355824316"); element.addEventListener("rhcl-text-field-changed", function(){this.value=this.value.trim();}); </script> <script> window.ready(() => { window.addEventListener("rhcl-text-field-blur", e => { const textField = e.target textField.customInvalid = null; textField.customErrorMessage = null; }) }) </script></div> </div> </div> <div class="col-md-6 field-element-col"> <div class="aem-Grid aem-Grid--12 aem-Grid--default--12 "> <div class="rhformtext text aem-GridColumn aem-GridColumn--default--12"> <rhcl-text-field id="rhcl-text-field--1653278447" label="Nom" type="text" required min-length="2" min-length-message="Nom doit comporter au moins 2 caractères." pattern="[a-zA-ZàèìòùÀÈÌÒÙáéíóúýÁÉÍÓÚÝâêîôûÂÊÎÔÛãñõÃÑÕäëïöüÿÄËÏÖÜŸçÇßØøÅåÆæœ]+(?:(?:\. |[\-' ])[a-zA-ZàèìòùÀÈÌÒÙáéíóúýÁÉÍÓÚÝâêîôûÂÊÎÔÛãñõÃÑÕäëïöüÿÄËÏÖÜŸçÇßØøÅåÆæœ]+)*" format-message="Veuillez saisir un Nom valide" size="small" theme="concrete" name="lastName"> </rhcl-text-field> <script> var element = document.getElementById("rhcl-text-field--1653278447"); element.addEventListener("rhcl-text-field-changed", function(){this.value=this.value.trim();}); </script> <script> window.ready(() => { window.addEventListener("rhcl-text-field-blur", e => { const textField = e.target textField.customInvalid = null; textField.customErrorMessage = null; }) }) </script></div> </div> </div> <div class="col-md-6 field-element-col"> <div class="aem-Grid aem-Grid--12 aem-Grid--default--12 "> <div class="rhformtext text aem-GridColumn aem-GridColumn--default--12"> <rhcl-text-field id="rhcl-text-field-300857080" label="Société" type="text" required max-length="40" min-length="2" min-length-message="Société doit comporter au moins 2 caractères." size="small" theme="concrete" name="companyName"> </rhcl-text-field> <script> document.getElementById("rhcl-text-field-300857080").addEventListener("rhcl-text-field-blur", customValidations); function customValidations() { let isValid = true; const promises = []; document.getElementById("rhcl-text-field-300857080").removeAttribute("custom-invalid"); document.getElementById("rhcl-text-field-300857080").customInvalid = null; promises.push(document.getElementById("rhcl-text-field-300857080").validate()); Promise.allSettled(promises).then((results) => { results.forEach((result) => { if (result.status === "fulfilled") { if (!result.value) { isValid = false; } } }); if (isValid) { var customPatternString = ""; var customErrorMessages = ""; var patterns = customPatternString.split(",regex,"); var messages = customErrorMessages.split(",regex,"); var value = this.value; var initialMessage = this.getAttribute("custom-error-message"); var flag = 0; for (var i = 0; i < patterns.length; i++) { var pattern; var stringPattern = patterns[i]; var dollar = stringPattern.charAt(stringPattern.length - 1); if (dollar != '$') pattern = stringPattern + '$'; else pattern = stringPattern; var reg = new RegExp(pattern); var result = reg.test(value); if (result == false) { flag = 1; if (initialMessage != null) { if (!initialMessage.includes(messages[i])) initialMessage = initialMessage + " " + messages[i] + " "; } if (initialMessage == null) { initialMessage = messages[i] + " "; } } else if (result == true) { if (initialMessage != null && initialMessage.includes(messages[i])) { initialMessage = initialMessage.replace(messages[i], ''); } } } if (flag == 1) { this.setAttribute("custom-invalid", ""); } else this.removeAttribute("custom-invalid"); if (initialMessage != null && initialMessage != " " && initialMessage != "") this.setAttribute("custom-error-message", initialMessage); } }); } </script> <script> var element = document.getElementById("rhcl-text-field-300857080"); element.addEventListener("rhcl-text-field-changed", function(){this.value=this.value.trim();}); </script> <script> window.ready(() => { window.addEventListener("rhcl-text-field-blur", e => { const textField = e.target textField.customInvalid = null; textField.customErrorMessage = null; }) }) </script></div> </div> </div> <div class="col-md-6 field-element-col"> <div class="aem-Grid aem-Grid--12 aem-Grid--default--12 "> <div class="rhformtext text aem-GridColumn aem-GridColumn--default--12"> <rhcl-text-field id="rhcl-text-field-549874325" label="Intitulé du poste" type="text" required min-length="2" min-length-message="Intitulé du poste doit comporter au moins 2 caractères." size="small" theme="concrete" name="customerTitle"> </rhcl-text-field> <script> var element = document.getElementById("rhcl-text-field-549874325"); element.addEventListener("rhcl-text-field-changed", function(){this.value=this.value.trim();}); </script> <script> window.ready(() => { window.addEventListener("rhcl-text-field-blur", e => { const textField = e.target textField.customInvalid = null; textField.customErrorMessage = null; }) }) </script></div> </div> </div> <div class="col-md-6 field-element-col"> <div class="aem-Grid aem-Grid--12 aem-Grid--default--12 "> <div class="rhformtext text aem-GridColumn aem-GridColumn--default--12"> <rhcl-text-field id="rhcl-text-field--1509549895" label="Téléphone" type="tel" required pattern="^(?!\+32)([\s\.\-\(\)]?\d[\s\.\-\(\)]?){9,10}$" format-message="Veuillez saisir un numéro de téléphone valide de 9 à 10 chiffres ne commençant pas par 32." size="small" theme="concrete" name="phoneNumber"> </rhcl-text-field> <script> var element = document.getElementById("rhcl-text-field--1509549895"); element.addEventListener("rhcl-text-field-changed", function(){this.value=this.value.trim();}); </script> <script> window.ready(() => { window.addEventListener("rhcl-text-field-blur", e => { const textField = e.target textField.customInvalid = null; textField.customErrorMessage = null; }) }) </script></div> </div> </div> <div class="col-md-6 field-element-col"> <div class="aem-Grid aem-Grid--12 aem-Grid--default--12 "> <div class="rhformtext text aem-GridColumn aem-GridColumn--default--12"> <rhcl-text-field id="rhcl-text-field--2000565154" label="Email" type="email" required pattern="(?!.*\.\.)[\-\w.]+@[\w\-.]+\.[A-Za-z]{2,6}(?:,[\-\w.]+@[\w\-.]+\.[A-Za-z]{2,4}){0,4}" format-message="L'adresse e-mail doit respecter le format suivant :sample@test.com" size="small" theme="concrete" name="email" error-message-candidate="Merci d'utiliser votre adresse e-mail professionnelle"> </rhcl-text-field> <script> const type = document.getElementById("rhcl-text-field--2000565154").getAttribute("type"); if (type === "email") document.getElementById("rhcl-text-field--2000565154").addEventListener("rhcl-text-field-blur", emailValidation); function shouldCheckEmailValidation(value, forceValidation) { const personalEmailFlag = "true"; if (!personalEmailFlag && !forceValidation) return; const domainArray = value.split("@"); return !(domainArray.length !== 2 || !value.includes(".")); } function checkEmailValidityForCustomDomains(value) { var allDomains = "gmail.com,yahoo.com,hotmail.com,outlook.com,icloud.com,ymail.com,sbcglobal.net,bellsouth.net,jourrapide.com,comcast.net,cox.net,live.com,att.net,telesyncglobal.com,yelesync.co.us,globalcom.com,msn.com,aol.com,yahoo.co.jp,yahoo.com.br,hotmail.co.uk,yahoo.ae,yahoo.at,yahoo.be,yahoo.ca,yahoo.ch,yahoo.cn,yahoo.co,yahoo.co.id,yahoo.co.il,yahoo.co.in,yahoo.co.kr,yahoo.co.nz,yahoo.co.th,yahoo.co.uk,yahoo.co.za,yahoo.com.ar,yahoo.com.au,yahoo.com.cn,yahoo.com.co,yahoo.com.hk,yahoo.com.is,yahoo.com.mx,yahoo.com.my,yahoo.com.ph,yahoo.com.ru,yahoo.com.sg,yahoo.com.tr,yahoo.com.tw,yahoo.com.vn,yahoo.cz,yahoo.de,yahoo.dk,yahoo.es,yahoo.fi,yahoo.fr,yahoo.gr,yahoo.hu,yahoo.ie,yahoo.in,yahoo.it,yahoo.jp,yahoo.net,yahoo.nl,yahoo.no,yahoo.pl,yahoo.pt,yahoo.ro,yahoo.ru,yahoo.se,hotmail.be,hotmail.ca,hotmail.ch,hotmail.co,hotmail.co.il,hotmail.co.jp,hotmail.co.nz,hotmail.co.za,hotmail.com.ar,hotmail.com.au,hotmail.com.br,hotmail.com.mx,hotmail.com.tr,hotmail.de,hotmail.es,hotmail.fi,hotmail.fr,hotmail.it,hotmail.kg,hotmail.kz,hotmail.my,hotmail.nl,hotmail.ro,hotmail.roor,hotmail.ru,gmail.co.za,gmail.com.au,gmail.com.br,gmail.ru"; var domains = allDomains.split(","); const domainArray = value.split("@"); var domain = domainArray[domainArray.length - 1]; var flag = 0; for (var i = 0; i < domains.length; i++) { if (domain === domains[i]) { flag = 1; break; } } return flag !== 1; } function setEmailCustomErrorMessage(forceValidation) { let emailField = getEmailField(); var message = "Merci d'utiliser votre adresse email professionnelle."; var value = emailField.value; if (shouldCheckEmailValidation(value, forceValidation)) { var isEmailValid = checkEmailValidityForCustomDomains(value, forceValidation); if (!isEmailValid) { emailField.setAttribute("custom-invalid", ""); var initialMessage = emailField.getAttribute("custom-error-message"); if (initialMessage != null && initialMessage !== "") { if (!initialMessage.includes(message)) { var customMessage = initialMessage + " " + message + " "; emailField.setAttribute("custom-error-message", customMessage); } } else if (initialMessage == null || initialMessage === "") { emailField.setAttribute("custom-error-message", message); } } else if (isEmailValid) { if (emailField.hasAttribute("custom-invalid")) { emailField.removeAttribute("custom-invalid"); } if (emailField.hasAttribute("custom-error-message")) { var initialMessage = emailField.getAttribute("custom-error-message"); if (initialMessage == null || initialMessage === "") emailField.removeAttribute("custom-error-message"); else if (initialMessage != null && initialMessage !== "") { if (initialMessage.includes(message)) { var x = initialMessage.replace(message, ""); emailField.setAttribute("custom-error-message", x); } } } } } else { if (emailField.hasAttribute("custom-invalid")) { emailField.removeAttribute("custom-invalid"); } if ( emailField.hasAttribute("custom-error-message") && emailField.getAttribute("custom-error-message") === "" ) { emailField.removeAttribute("custom-error-message"); } } } function getEmailField() { return document.getElementById( "rhcl-text-field--2000565154" ); } function emailValidation() { let isValid = true; const promises = []; document .getElementById( "rhcl-text-field--2000565154" ) .removeAttribute("custom-invalid"); document.getElementById( "rhcl-text-field--2000565154" ).customInvalid = null; promises.push( document .getElementById( "rhcl-text-field--2000565154" ) .validate() ); Promise.allSettled(promises).then((results) => { results.forEach((result) => { if (result.status === "fulfilled") { if (!result.value) { isValid = false; } } }); if (isValid) { setEmailCustomErrorMessage(); } }); } </script> <script> { const emailTextField = document.getElementById( "rhcl-text-field--2000565154" ); const emailCheckCandidate = async (forceValidation) => { const candidateEmailRestricted = "true"; if (!candidateEmailRestricted && !forceValidation) return const promises = []; let isValid = true; emailTextField.removeAttribute("custom-invalid"); emailTextField.customInvalid = null; const email = emailTextField.value; // check for email validity before doing email check promises.push(emailTextField.validate()); await Promise.allSettled(promises).then(async (results) => { results.forEach((result) => { if (result.status === "fulfilled") { if (!result.value) { isValid = false; } } }); if (isValid) { async function accountEmailCheck(email) { return fetch( window.aemSettings.rh_common.accountCheckEndpoint + email ) .then((res) => res.json().then((data) => { /** * { * "isCandidate": true, #true if SFCC response "emailType" is "candidate" * "isClient": false, #true if SFCC response "emailType" is "client" * "accountCheck": "hasWebAccount", # SFCC response "accountCheck" String value * "hasUser": true # SFCC response "hasUser" boolean value, * "needNewResume": true # if SFCC response "lastResumeDate" is older than 6 month or "lastResumeDate" is null * } **/ return data; }) ) .catch((err) => console.error(err)); } await accountEmailCheck(email).then((response) => { if (response?.isCandidate === true) { // candidate email used where it's restricted, show error const restrictedErrorMessage = "Merci d\x27utiliser votre adresse e\u002Dmail professionnelle"; emailTextField.customInvalid = true; emailTextField.customErrorMessage = restrictedErrorMessage; } }); } }); }; emailTextField.addEventListener( "rhcl-text-field-blur", emailCheckCandidate ); window.progressiveFrameCandidateEmailCheck = emailCheckCandidate; window.ssjoCandidateEmailCheck = emailCheckCandidate; } </script> <script> var element = document.getElementById("rhcl-text-field--2000565154"); element.addEventListener("rhcl-text-field-changed", function(){this.value=this.value.trim();}); </script> <script> window.ready(() => { window.addEventListener("rhcl-text-field-blur", e => { const textField = e.target textField.customInvalid = null; textField.customErrorMessage = null; }) }) </script></div> </div> </div> <div class="col-md-6 field-element-col"> <div class="aem-Grid aem-Grid--12 aem-Grid--default--12 "> <div class="rhformtext text aem-GridColumn aem-GridColumn--default--12"> <div hidden id="rhFormTextField" data-pattern="^[0-9]{4}$" data-errorMessage="Le format du champ Code postal est invalide"></div> <rhcl-text-field id="rhcl-text-field--590862521" label="Code postal" type="text" required pattern="^[0-9]{4}$" format-message="Le format du champ Code postal est invalide" size="small" theme="concrete" name="postalCode"> </rhcl-text-field> <script> var element = document.getElementById("rhcl-text-field--590862521"); element.addEventListener("rhcl-text-field-changed", function(){this.value=this.value.trim();}); </script> <script> window.ready(() => { window.addEventListener("rhcl-text-field-blur", e => { const textField = e.target textField.customInvalid = null; textField.customErrorMessage = null; }) }) </script></div> </div> </div> <div class="col-md-6 field-element-col"> <div class="aem-Grid aem-Grid--12 aem-Grid--default--12 "> </div> </div> <div class="col-md-12 field-element-col"> <div class="aem-Grid aem-Grid--12 aem-Grid--default--12 "> <div class="root container-fluid cmp-container aem-GridColumn aem-GridColumn--default--12"> <rhcl-checkbox error-message="Veuillez accepter les conditions générales et la politique en matière de vie privée." name="tou" required size="small"> <label slot="label">J'accepte les <a href="/be/fr/website-et-cookies">conditions générales</a> et la <a href="/be/fr/vie-privee">politique en matière de vie privée</a>.</label> </rhcl-checkbox> </div> </div> </div> <div class="col-md-12 field-element-col"> <div class="aem-Grid aem-Grid--12 aem-Grid--default--12 "> <div class="root container-fluid cmp-container aem-GridColumn aem-GridColumn--default--12"> <rhcl-checkbox name="newsClient" size="small"> <label slot="label">Gardez-moi au courant des conseils de recrutement et leadership.</label> </rhcl-checkbox> </div> </div> </div> </div> </div> </div> </div> <div class="hiddenfield"> <div class="cq-placeholder" data-emptytext="Form : RH Hidden Form Group (AEM)"></div> <input type="hidden" id="country" name="country" value="BE"/> <input type="hidden" id="languageLocale" name="languageLocale"/> <input type="hidden" id="lob" name="lob" value="lob"/> <input type="hidden" id="mktAutomationId" name="mktAutomationId"/> <input type="hidden" id="formUrl" name="formUrl"/> <input type="hidden" id="googleAnalyticsId" name="googleAnalyticsId"/> <input type="hidden" id="middleInitial" name="middleInitial"/> <input type="hidden" id="ipAddress" name="ipAddress"/> <input type="hidden" id="leadId" name="leadId"/> <input type="hidden" id="contactMethod" name="contactMethod"/> <input type="hidden" id="mostRecentDownload" name="mostRecentDownload"/> <input type="hidden" id="mostRecentCampaign" name="mostRecentCampaign"/> <input type="hidden" id="eventID" name="eventID"/> <input type="hidden" id="on24Key" name="on24Key"/> <input type="hidden" id="startDate" name="startDate"/> <input type="hidden" id="rhdSourceId" name="rhdSourceId"/> <input type="hidden" id="utmSource" name="utmSource"/> <input type="hidden" id="utmCampaign" name="utmCampaign"/> <input type="hidden" id="httpReferrerUrl" name="httpReferrerUrl"/> <input type="hidden" id="httpUserAgentBrowser" name="httpUserAgentBrowser"/> <input type="hidden" id="remoteAddrIp" name="remoteAddrIp"/> <input type="hidden" id="requestUrl" name="requestUrl"/> <input type="hidden" id="formType" name="formType"/> <input type="hidden" id="source" name="source"/> <input type="hidden" id="gclid" name="gclid"/> <input type="hidden" id="sfContactId" name="sfContactId"/> <input type="hidden" id="sfJoNumber" name="sfJoNumber"/> <input type="hidden" id="submissionDateTime" name="submissionDateTime"/> <input type="hidden" id="formUrlEncoded" name="formUrlEncoded"/> <input type="hidden" id="tealiumId" name="tealiumId"/> <input type="hidden" id="rhInternalTrackingType" name="rhInternalTrackingType"/> <input type="hidden" id="rhInternalTrackingValue" name="rhInternalTrackingValue"/> </div> <div class="rhformhiddenfield hidden"> <input type="hidden" id="form-hidden-619645993" name="formName" value="be-joborder"/> </div> <div class="rhformhiddenfield hidden"> <input type="hidden" id="form-hidden-818041152" name="formType" value="job-order"/> </div> <div class="rhformhiddenfield hidden"> <input type="hidden" id="form-hidden-2141264884" name="languageLocale" value="be-fr"/> </div> <div class="rhformhiddenfield hidden"> <input type="hidden" id="form-hidden-1397053864" name="mktAutomationId" value="be-joborder"/> </div> <div class="rhformhiddenfield hidden"> <input type="hidden" id="form-hidden-1316500009" name="middleInitial"/> </div> <div class="rhformhiddenfield hidden"> <input type="hidden" id="form-hidden-343029695" name="branchId"/> </div> <div class="rhformhiddenfield hidden"> <input type="hidden" id="form-hidden-619644630" name="branchName"/> </div> <div class="rhformhiddenfield hidden"> <input type="hidden" id="form-hidden-1587981051" name="clientSelectedBranchId"/> </div> <div class="rhformhiddenfield hidden"> <input type="hidden" id="form-hidden-1403208804" name="routingEmail" value="joborders_uk@roberthalf.co.uk"/> </div> <div class="rhformhiddenfield hidden"> <input type="hidden" id="form-hidden-619644381" name="servicePreference" value="staff"/> </div> <div class="form-footer row"> <div class="form-submit-btn"> <rhcl-button data-recaptcha-message="Echec de validation reCaptcha" external="true" full-width="false" full-width-mobile="true" label="Envoyer votre annonce" size="medium" size-md="" size-sm="medium" theme="light" variant="primary" invisible-key="6LejimkkAAAAAFXPuyq9-cY_Tn0LOdrBWZfprr5D" interactive-key="6LcOU2gkAAAAAADWX4mm0-uWGn4RX-kaZT7UxUQJ"> </rhcl-button> </div> <div class="form-foot-note col-md-12 px-0"> <span class="rhcl-typography rhcl-typography--variant-legal"> </span> </div> </div> <div id="showPopupStatus" data-copy="<p>Merci de nous avoir contactés.</p> "></div> </form> <div id="backdrop" class="d-none"> <div class="loader-div"> <rhcl-loading-spinner label="Veuillez patienter" theme="dark" transparency="partial" style="width: 100%; height: 100%;"/> </div> </div> <script src="https://www.google.com/recaptcha/enterprise.js?render=explicit" async defer> </script> <script> { if (!window.common?.getElementByJumpLinkId) { window.common = { ...window.common, /** * this function is to handle getting the element from the jump link id * */ getElementByJumpLinkId: (id) => { let el = document.getElementById(id) if (!el) return const allowedNodeNames = [ 'RHCL-TEXT-FIELD', 'RHCL-TEXTAREA', 'RHCL-DATEPICKER', 'RHCL-TYPEAHEAD', 'RHCL-CHECKBOX', 'RHCL-CHECKBOX-GROUP', 'RHCL-RADIO-GROUP', 'RHCL-DROPDOWN', 'RHCL-SWITCH' ] while (!!el.nextElementSibling && !allowedNodeNames.includes(el.nodeName)) { el = el.nextElementSibling; } if (!allowedNodeNames.includes(el.nodeName)) { // there was no sibling to the element with that id that is a valid input console.error('Could not find a valid input element with this id:', id) // return undefined instead of last found node return } return el } } } const initialEndpoint = 'https:\/\/prd\u002Ddr.lp.api.roberthalfonline.com\/proxy\u002Dlead\u002Dprocessing\/send'; const initialEndpointType = 'leads'; const basicFormEndpoint = 'https:\/\/prd\u002Ddr.ma.api.roberthalfonline.com\/form\u002Dsubmission\/submit'; const ssjoEndpoint = 'https:\/\/prd\u002Ddr.lp.api.roberthalfonline.com\/proxy\u002Dlead\u002Dprocessing\/send'; const jobAlertsEndpoint = 'https:\/\/prd\u002Ddr.ma.api.roberthalfonline.com\/job\u002Dalerts\/subscribe'; const formContainer = document.querySelector('form.form-container'); // get the form routing destinations const destinations = document.querySelectorAll('input[data-form-routing="true"]') const destinationControls = []; // get array of all destinations controls and required values Array.from(destinations).forEach(destination => { const relatedId = destination.dataset.formRoutingId; const requiredValue = destination.dataset.formRoutingValue; const routingEndpointTypes = destination.dataset.formRoutingSsjoEndpoint; const routingEndpointTypesArray = routingEndpointTypes.split(','); if (!relatedId) return; // skip elements where the dataset has no details // check required value on related id const controlElement = window.common.getElementByJumpLinkId(relatedId); destinationControls.push({controlElement, requiredValue, routingEndpointTypesArray}) }) // listen on any change of the control elements const mutationObserver = new MutationObserver(mutations => { mutations.forEach(mutation => { updateFormEndpoint(); }) }) destinationControls.forEach(({ controlElement }) => { mutationObserver.observe( controlElement, { attributes: true, attributeFilter: ['value', 'selected']} ) }); // update the form action to use the correct endpoint const updateFormEndpoint = () => { let endpointList = {}; let actionEndpoint = initialEndpoint; endpointList[initialEndpointType] = initialEndpoint; destinationControls.some(({ controlElement, requiredValue, routingEndpointTypesArray }) => { if (controlElement.value === requiredValue) { endpointList = {}; routingEndpointTypesArray.forEach((routingEndpointType) => { switch (routingEndpointType) { case 'leads': endpointList['leads'] = ssjoEndpoint; actionEndpoint = ssjoEndpoint; break; case 'nonLeads': endpointList['nonLeads'] = basicFormEndpoint; actionEndpoint = basicFormEndpoint; break; case 'jobAlerts': endpointList['jobAlerts'] = jobAlertsEndpoint; actionEndpoint = jobAlertsEndpoint; break; default: console.log("No EndpointType found for Form Submission. -- ", routingEndpointType); break; } }); return true; } return false; }); formContainer.action = actionEndpoint || formContainer.action; formContainer.dataset.attributeEndpoints = JSON.stringify(endpointList) || formContainer.dataset.attributeEndpoints; }; // initial form endpoint setup updateFormEndpoint(); } </script> </div> </div> </div> </div> </div> <rhcl-content-list heading-tag="h1" slot="list"> <rhcl-content-list-item slot="item" label="De nombreux candidats qualifiés"></rhcl-content-list-item> <rhcl-content-list-item slot="item" label="Matching intelligent"></rhcl-content-list-item> <rhcl-content-list-item slot="item" label="Sur site ou à distance"></rhcl-content-list-item> </rhcl-content-list> </rhcl-block-hero-form> </div> </div> </div> </div> <div class="experiencefragment aem-GridColumn aem-GridColumn--default--12"> <div id="experiencefragment-dbe5f827ea" class="cmp-experiencefragment cmp-experiencefragment--footer"> <div id="container-644c173c4b" class="cmp-container"> <div class="aem-Grid aem-Grid--12 aem-Grid--default--12 "> <div class="footer aem-GridColumn aem-GridColumn--default--12"> <rhcl-footer logo-destination="/be/fr" variant="minimized"> <rhcl-list-base slot="legal-menu"> <rhcl-menu-link slot="item"> <a slot="item" href="/be/fr/informations-sur-la-societe">Informations sur la société</a> </rhcl-menu-link> <rhcl-menu-link slot="item"> <a slot="item" href="/be/fr/vie-privee">Avis de confidentialité</a> </rhcl-menu-link> <rhcl-menu-link slot="item"> <a slot="item" href="/be/fr/website-et-cookies">Website and cookies</a> </rhcl-menu-link> <rhcl-menu-link slot="item"> <a slot="item" href="/be/fr/conditions-de-recrutement">Conditions de recrutement</a> </rhcl-menu-link> <rhcl-menu-link slot="item"> <a slot="item" href="/be/fr/alerte-fraude">Alerte fraude</a> </rhcl-menu-link> <rhcl-menu-link slot="item"> <a slot="item" href="/be/fr/politique-denonciation">Politique de dénonciation</a> </rhcl-menu-link> <rhcl-menu-link slot="item"> <a slot="item" href="/be/fr/feedback-webmaster">Feedback webmaster</a> </rhcl-menu-link> </rhcl-list-base> <rhcl-typography slot="copyright">Robert Half Inc. All Rights Reserved. </rhcl-typography> <rhcl-country-selector slot="locale-selector" name="locale"> <a data-locale="en-AU" href="https://www.roberthalf.com/au/en/c/hire" slot="link"> Australia - English </a> <a data-locale="en-BE" href="https://www.roberthalf.com/be/en/c/hire" slot="link"> Belgium - English </a> <a data-locale="nl-BE" href="https://www.roberthalf.com/be/nl/c/werven" slot="link"> Belgium - Nederlands </a> <a data-locale="fr-BE" href="https://www.roberthalf.com/be/fr/c/recruter" slot="link"> Belgium - Français </a> <a data-locale="pt-BR" href="https://www.roberthalf.com/br/pt/c/contrate" slot="link"> Brazil - Português </a> <a data-locale="en-CA" href="https://www.roberthalf.com/ca/en/c/hire" slot="link"> Canada - English </a> <a data-locale="fr-CA" href="https://www.roberthalf.com/ca/fr/c/embaucher" slot="link"> Canada - Français </a> <a data-locale="es-CL" href="https://www.roberthalf.com/cl/es" slot="link"> Chile - Español </a> <a data-locale="en-CN" href="https://www.roberthalf.cn/cn/en" slot="link"> China - English </a> <a data-locale="zh-CN" href="https://www.roberthalf.cn/cn/zh" slot="link"> China - 中文 </a> <a data-locale="fr-FR" href="https://www.roberthalf.com/fr/fr/c/recrutement" slot="link"> France - Français </a> <a data-locale="de-DE" href="https://www.roberthalf.com/de/de/c/ihre-personalanfrage" slot="link"> Germany - Deutsch </a> <a data-locale="en-HK" href="https://www.roberthalf.com/hk/en" slot="link"> Hong Kong, China - English </a> <a data-locale="en-IE" href="https://www.roberthalf.com/ie/en" slot="link"> Ireland - English </a> <a data-locale="en-JP" href="https://www.roberthalf.com/jp/en/c/hire" slot="link"> Japan - English </a> <a data-locale="ja-JP" href="https://www.roberthalf.com/jp/ja/c/hire" slot="link"> Japan - 日本語 </a> <a data-locale="en-LU" href="https://www.roberthalf.com/lu/en/c/hire" slot="link"> Luxembourg - English </a> <a data-locale="fr-LU" href="https://www.roberthalf.com/lu/fr/c/recruter" slot="link"> Luxembourg - Français </a> <a data-locale="en-NL" href="https://www.roberthalf.com/nl/en" slot="link"> Netherlands - English </a> <a data-locale="nl-NL" href="https://www.roberthalf.com/nl/nl" slot="link"> Netherlands - Nederlands </a> <a data-locale="en-NZ" href="https://www.roberthalf.com/nz/en/c/hire" slot="link"> New Zealand - English </a> <a data-locale="en-SG" href="https://www.roberthalf.com/sg/en" slot="link"> Singapore - English </a> <a data-locale="de-CH" href="https://www.roberthalf.com/ch/de" slot="link"> Switzerland - Deutsch </a> <a data-locale="en-CH" href="https://www.roberthalf.com/ch/en" slot="link"> Switzerland - English </a> <a data-locale="fr-CH" href="https://www.roberthalf.com/ch/fr" slot="link"> Switzerland - Français </a> <a data-locale="en-AE" href="https://www.roberthalf.com/ae/en" slot="link"> United Arab Emirates - English </a> <a data-locale="en-GB" href="https://www.roberthalf.com/gb/en/c/hire" slot="link"> United Kingdom - English </a> <a data-locale="en-US" href="https://www.roberthalf.com/us/en/c/hire" slot="link"> United States - English </a> </rhcl-country-selector> </rhcl-footer> <rhcl-back-to-top-button></rhcl-back-to-top-button> <style> rhcl-back-to-top-button{--rhcl-floating-button-bottom:260px} </style> <script type="text/javascript"> window.addEventListener("rhcl-menu-link-clicked", (e) => { e.preventDefault(); let link = e.composedPath()[0]; if(link.hasAttribute('data-modal-popup')) { let modalId = link.getAttribute('data-modal-identifier'); let modal = document.querySelector(`div#${modalId} rhcl-modal`); modal.setAttribute('show-modal', true); } }); document.addEventListener('rhcl-locale-selector-item-clicked', function (e) { if(e && e.detail){ window.location.href = e.detail; } }); </script> </div> </div> </div> </div> </div> </div> </div> </div> <link rel="preload" href="https://rh.my.salesforce-sites.com/liveagent/EinsteinBotEmbedCSS" as="style" onload="this.onload=null;this.rel='stylesheet'"/> <noscript><link rel="stylesheet" href="https://rh.my.salesforce-sites.com/liveagent/EinsteinBotEmbedCSS"/></noscript> </body> </html>