No matter the age of your home, everyone eventually needs concrete repair and leveling. Liberty Hill, TX, keeps your property at risk for sunken cement. When you need reliable repair contractors, you need ours. Liberty Hill Concrete Repair and Leveling offers the best in local concrete sealing services.
Hire us for your house and commercial concrete repair, also. Our technicians provide patio, porch, and pool deck repair and other options. Choose us for concrete slab leveling, and other surfaces. From concrete sidewalk and driveway repair to safety inspections, call us first.
Call our family-owned business for all your cement repair needs. Hire Liberty Hill Concrete Repair and Leveling at 512-572-2952.
Schedule your free estimate today!
Our Services
Sidewalk and Driveway Repair
Concrete Slab Leveling
Patio, Porch and Pool Deck Repair
Warehouse/Factory Floor Repair
Commercial Concrete Repair
Polyurethane Foam Injection
Liberty Hill Concrete Repair And Leveling
★★★★★Rated 5 out of 5
Liberty Hill Concrete Repair And Leveling Liberty Hill, TX 512-572-2952
.elementor-form .elementor-message-danger,
.elementor-form .elementor-message-danger:before,
.elementor-form .elementor-message,
.elementor-form .elementor-error,
.elementor-form .elementor-field-error {
display: none !important;
}
(function () {
var VALIDATION_WORKER_URL =
window.FORM_VALIDATION_WORKER_URL ||
'https://form-validation-worker.michael-215.workers.dev/';
function removeElementorErrors(form) {
form.querySelectorAll(
'.elementor-message-danger,' +
'.elementor-message,' +
'.elementor-error,' +
'.elementor-field-error'
).forEach(function (el) {
el.remove();
});
}
function finishSubmission(form, submitBtn, originalText) {
removeElementorErrors(form);
// Static site: CallRail captures the lead
if (window.CallTrk && typeof CallTrk.captureForm === 'function') {
CallTrk.captureForm(form);
alert('Thank you! Your request has been submitted successfully.');
form.reset();
submitBtn.disabled = false;
submitBtn.textContent = originalText;
return;
}
// Live WordPress: pass through to Elementor AJAX after validation
form.dataset.validationPassed = 'true';
submitBtn.disabled = false;
submitBtn.textContent = originalText;
alert('Thank you! Your request has been submitted successfully.');
setTimeout(function () {
submitBtn.click();
}, 300);
}
function initFormValidation(form) {
if (form.dataset.validationInitialized === 'true') return;
var submitBtn = form.querySelector('button[type="submit"]');
var firstName = form.querySelector('[name="form_fields[ct_fName]"]');
var lastName = form.querySelector('[name="form_fields[ct_lName]"]');
var phoneField = form.querySelector('[name="form_fields[ct_pNumber]"]');
var emailField = form.querySelector('[name="form_fields[ct_email]"]');
var zipField = form.querySelector('[name="form_fields[ct_zCode]"]');
if (!submitBtn || !firstName || !lastName || !phoneField || !emailField || !zipField) {
return;
}
form.dataset.validationInitialized = 'true';
form.setAttribute('novalidate', 'novalidate');
phoneField.setAttribute('type', 'text');
emailField.setAttribute('type', 'text');
var observer = new MutationObserver(function () {
removeElementorErrors(form);
});
observer.observe(form, { childList: true, subtree: true });
submitBtn.addEventListener(
'click',
async function (e) {
if (form.dataset.validationPassed === 'true') {
form.dataset.validationPassed = '';
return;
}
e.preventDefault();
e.stopPropagation();
e.stopImmediatePropagation();
removeElementorErrors(form);
var fName = firstName.value.trim();
var lName = lastName.value.trim();
var phone = phoneField.value.trim();
var email = emailField.value.trim();
var zip = zipField.value.trim();
var cleanPhone = phone.replace(/D/g, '');
var nameRegex = /^[A-Za-zs'-]{2,30}$/;
var emailRegex = /^S+@S+.S+$/;
var zipRegex = /^d{5}(-d{4})?$/;
if (!nameRegex.test(fName)) {
alert('Enter a valid first name.');
firstName.focus();
return;
}
if (!nameRegex.test(lName)) {
alert('Enter a valid last name.');
lastName.focus();
return;
}
if (cleanPhone.length !== 10) {
alert('Enter a valid 10-digit phone number.');
phoneField.focus();
return;
}
if (!emailRegex.test(email)) {
alert('Enter a valid email address.');
emailField.focus();
return;
}
if (!zipRegex.test(zip)) {
alert('Enter a valid ZIP code.');
zipField.focus();
return;
}
submitBtn.disabled = true;
var originalText = submitBtn.textContent;
submitBtn.textContent = 'Submitting...';
try {
var response = await fetch(VALIDATION_WORKER_URL, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
firstName: fName,
lastName: lName,
phone: cleanPhone,
email: email,
zip: zip
})
});
var data = await response.json();
if (!data.success) {
alert(data.message || 'Submission blocked. Please check your details.');
submitBtn.disabled = false;
submitBtn.textContent = originalText;
return;
}
finishSubmission(form, submitBtn, originalText);
} catch (error) {
console.error('Worker validation failed:', error);
alert('Something went wrong. Please try again.');
submitBtn.disabled = false;
submitBtn.textContent = originalText;
}
},
true
);
removeElementorErrors(form);
console.log('Form validation ready:', form.getAttribute('name') || 'elementor-form');
}
function boot() {
document.querySelectorAll('.elementor-form').forEach(initFormValidation);
}
document.addEventListener('DOMContentLoaded', function () {
boot();
setTimeout(boot, 500);
setTimeout(boot, 2000);
if (typeof MutationObserver !== 'undefined') {
var mo = new MutationObserver(boot);
mo.observe(document.body, { childList: true, subtree: true });
}
});
})();