www.toiture24.ch
Open in
urlscan Pro
2a06:98c1:3120::3
Public Scan
Submitted URL: https://toiture24.ch/
Effective URL: https://www.toiture24.ch/fr/
Submission: On December 16 via api from CH — Scanned from CH
Effective URL: https://www.toiture24.ch/fr/
Submission: On December 16 via api from CH — Scanned from CH
Form analysis
4 forms found in the DOM<form ng-submit="openForm()" class="d-flex flex-column flex-sm-row ng-pristine ng-valid">
<div class="sd-mb-0_5 sd-mb-sm-0 lead text-gray sd-mr-sm-0_5 flex-even">
<input ng-model="data.postcode" ng-class="{ 'invalid-state': showErrorMessage() }" name="postcode" class="form-control upper ng-pristine ng-untouched ng-valid ng-empty" type="text" ng-change="formScope.step = 1" placeholder="Votre code postal">
</div>
<div class="flex-even">
<button type="submit" class="btn-arrow-tail" id="go">Ok</button>
</div>
</form>
Name: formScope.leadform —
<form name="formScope.leadform" class="form form-horizontal ng-pristine ng-invalid ng-invalid-required ng-valid-minlength ng-valid-pattern ng-valid-email" novalidate="">
<input type="hidden" class="ng-pristine ng-untouched ng-valid ng-not-empty ng-valid-required" ng-model="data.lead_version" name="data.lead_version" required="" ng-init="data.lead_version = 'v1'">
<!-- ngIf: loadingState.showMatchingLoader -->
<!-- ngIf: loadingState.showSuccessMatchMessage -->
<loading-state form-step="formScope.step" form-data="data" form-id="8773" loading-state="loadingState" sanitize-params="sanitizeParams(params)" update-loading-state="updateLoadingState(state)" class="ng-isolate-scope">
</loading-state>
<div class="row">
<div class="col-centered col-sm-8 col-md-7">
<fieldset ng-disabled="formScope.step !== 1">
<div ng-form="" name="step1" ng-show="formScope.step === 1" class="ng-pristine ng-invalid ng-invalid-required">
<p class="form-heading">
</p>
<div class="form-group" sd-field-id="data.postcode" ng-class="{'has-error has-feedback': getErrorClassForField('data.postcode'), 'has-success has-feedback': getField('data.postcode').$touched && getField('data.postcode').$valid}">
<label for="data.postcode" class="col-sm-4 col-md-5 control-label
hidden-xs
"> Code postal </label>
<div class="placeholder-container col-xs-12 col-sm-8 col-md-7 input-text">
<input type="text" class="input-sm form-control upper hide-placeholder ng-pristine ng-untouched ng-isolate-scope ng-empty ng-invalid ng-invalid-required" placeholder="Code postal" ng-model="data.postcode" name="data.postcode"
id="data.postcode" required="" clearable="" sd-postcode-validator="https://skyapi.skydreams.com/1.0/postcode/validate/CH" sd-postcode-auto-complete="" url="https://skyapi.skydreams.com/1.0/postcode/autocomplete/CH/" city="data.city"
cityctrl="formScope.leadform.step1["data.city"]" address="data.address" addressctrl="formScope.leadform.step1["data.address"]" administrativearea="data.administrative_area"
administrativeareactrl="formScope.leadform.step1["data.administrative_area"]">
<span aria-hidden="true" ng-class="
{
'glyphicon glyphicon-remove form-control-feedback': getErrorClassForField('data.postcode'),
'glyphicon glyphicon-ok form-control-feedback': getField('data.postcode').$touched && getField('data.postcode').$valid,
'sd-pending form-control-feedback': getField('data.postcode').$pending
}
"></span>
<div class="text-danger ng-hide" sd-messages="getErrorForField('data.postcode')" ng-show="getErrorClassForField('data.postcode')">
<div class="error" sd-message="required" style="display: inline;"> Veuillez indiquer un code postal valide </div>
<div class="error" sd-message="postcode" style="display: none;"> Veuillez indiquer un code postal valide </div>
</div>
</div>
</div>
<div class="form-group" sd-field-id="data.city" ng-class="{'has-error has-feedback': getErrorClassForField('data.city'), 'has-success has-feedback': getField('data.city').$touched && getField('data.city').$valid}">
<label for="data.city" class="col-sm-4 col-md-5 control-label
hidden-xs
"> Ville </label>
<div class="placeholder-container col-xs-12 col-sm-8 col-md-7 input-text">
<input type="text" class="input-sm form-control hide-placeholder ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required" placeholder="Ville" ng-model="data.city" name="data.city" id="data.city" required="" clearable=""
data-autocomplete-city="">
<span aria-hidden="true" ng-class="
{
'glyphicon glyphicon-remove form-control-feedback': getErrorClassForField('data.city'),
'glyphicon glyphicon-ok form-control-feedback': getField('data.city').$touched && getField('data.city').$valid,
'sd-pending form-control-feedback': getField('data.city').$pending
}
"></span>
<div class="text-danger ng-hide" sd-messages="getErrorForField('data.city')" ng-show="getErrorClassForField('data.city')">
<div class="error" sd-message="required" style="display: inline;"> Veuillez indiquer votre ville </div>
</div>
</div>
</div>
<div class="form-group" sd-field-id="data.address" ng-class="{'has-error has-feedback': getErrorClassForField('data.address'), 'has-success has-feedback': getField('data.address').$touched && getField('data.address').$valid}">
<label for="data.address" class="col-sm-4 col-md-5 control-label
hidden-xs
"> Rue </label>
<div class="placeholder-container col-xs-12 col-sm-8 col-md-7 input-text">
<input type="text" class="input-sm form-control hide-placeholder ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required" placeholder="Rue" ng-model="data.address" name="data.address" id="data.address" required="" clearable=""
data-autocomplete-address="">
<span aria-hidden="true" ng-class="
{
'glyphicon glyphicon-remove form-control-feedback': getErrorClassForField('data.address'),
'glyphicon glyphicon-ok form-control-feedback': getField('data.address').$touched && getField('data.address').$valid,
'sd-pending form-control-feedback': getField('data.address').$pending
}
"></span>
<div class="text-danger ng-hide" sd-messages="getErrorForField('data.address')" ng-show="getErrorClassForField('data.address')">
<div class="error" sd-message="required" style="display: inline;"> Veuillez indiquer le nom de votre rue </div>
</div>
</div>
</div>
<div class="form-group" sd-field-id="data.address_number"
ng-class="{'has-error has-feedback': getErrorClassForField('data.address_number'), 'has-success has-feedback': getField('data.address_number').$touched && getField('data.address_number').$valid}">
<label for="data.address_number" class="col-sm-4 col-md-5 control-label
hidden-xs
"> N°/Nom de la résidence </label>
<div class="placeholder-container col-xs-12 col-sm-8 col-md-7 input-text">
<input type="text" class="input-sm form-control hide-placeholder ng-pristine ng-untouched ng-valid ng-empty" placeholder="N°/Nom de la résidence" ng-model="data.address_number" name="data.address_number" id="data.address_number"
clearable="12">
<span aria-hidden="true" ng-class="
{
'glyphicon glyphicon-remove form-control-feedback': getErrorClassForField('data.address_number'),
'glyphicon glyphicon-ok form-control-feedback': getField('data.address_number').$touched && getField('data.address_number').$valid,
'sd-pending form-control-feedback': getField('data.address_number').$pending
}
"></span>
<div class="text-danger ng-hide" sd-messages="getErrorForField('data.address_number')" ng-show="getErrorClassForField('data.address_number')">
</div>
</div>
</div>
<div class="form-group">
<div class="col-xs-12 col-sm-offset-4 col-md-offset-5 col-md-7 col-sm-8">
<button type="button" id="proceed-to-step-2" class="btn-arrow-tail button upper" ng-class="{'loading':submitting}" ng-click="progress()"> Etape 2 </button>
</div>
</div>
<div class="free form-group">
<div class="col-xs-12 col-md-offset-5 col-md-7 col-sm-offset-4 col-sm-8">
<div class="free text-center">
<span class="glyphicon glyphicon-ok checkmark"></span> Gratuit - Aucune Obligation
</div>
</div>
</div>
</div>
</fieldset>
<fieldset ng-disabled="formScope.step !== 2" disabled="disabled">
<div ng-form="" name="step2" ng-show="formScope.step === 2" class="ng-pristine ng-invalid ng-invalid-required ng-valid-minlength ng-hide">
<input type="hidden" class="ng-pristine ng-untouched ng-valid ng-not-empty ng-valid-required" ng-model="data.lead_version" name="data.lead_version" required="" ng-init="data.lead_version = "v3"">
<div class="form-group form-group-radio" sd-field-id="data.type" ng-class="{'has-error has-feedback': (submitted.indexOf(formScope.step) >= 0) && getField('data.type').$invalid}">
<label for="data.type" class="col-sm-4 col-md-5 control-label
"> Type de projet </label>
<div class="col-xs-12 col-sm-8 col-md-7">
<div class="radio-btns-container">
<div class="radio">
<label>
<input type="radio" name="data.type" value="tiled_roof" ng-model="data.type" required="" class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required">
<span class="radio-label"> Pose des tuiles <span ng-class="{'glyphicon glyphicon-remove': (submitted.indexOf(formScope.step) >= 0) && getField('data.type').$invalid}"></span>
</span>
</label>
</div>
<div class="radio">
<label>
<input type="radio" name="data.type" value="asphalt_roof" ng-model="data.type" required="" class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required">
<span class="radio-label"> Installation d'un toit en bitume </span>
</label>
</div>
<div class="radio">
<label>
<input type="radio" name="data.type" value="synthetic_roof" ng-model="data.type" required="" class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required">
<span class="radio-label"> Installation d'un toit synthétique/EPDM </span>
</label>
</div>
<div class="radio">
<label>
<input type="radio" name="data.type" value="guttering_downpipes" ng-model="data.type" required="" class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required">
<span class="radio-label"> Remplacer ou réparer les gouttières / tuyaux de descente </span>
</label>
</div>
<div class="radio">
<label>
<input type="radio" name="data.type" value="gutter_cleaning" ng-model="data.type" required="" class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required">
<span class="radio-label"> Nettoyage des gouttières </span>
</label>
</div>
<div class="radio">
<label>
<input type="radio" name="data.type" value="sink_roof" ng-model="data.type" required="" class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required">
<span class="radio-label"> Installation d'un toit en zinc </span>
</label>
</div>
<div class="radio">
<label>
<input type="radio" name="data.type" value="straw_roofing" ng-model="data.type" required="" class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required">
<span class="radio-label"> Installation d'un toit de chaume </span>
</label>
</div>
<div class="radio">
<label>
<input type="radio" name="data.type" value="roof_cleaning_demossing" ng-model="data.type" required="" class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required">
<span class="radio-label"> Nettoyage des toits / démoussage </span>
</label>
</div>
</div>
<div class="text-danger ng-hide" sd-messages="getErrorForField('data.type')" ng-show="getErrorClassForField('data.type')">
<div class="error " sd-message="required" style="display: none;"> Veuillez sélectionner le type de projet </div>
</div>
</div>
</div>
<!-- ngIf: data.type === 'tiled_roof' || data.type === 'asphalt_roof' || data.type === 'synthetic_roof' || data.type === 'straw_roofing' || data.type === 'sink_roof' -->
<!-- ngIf: data.type === 'gutter_cleaning' || data.type === 'guttering_downpipes' -->
<!-- ngIf: (data.type_of_job === 'roof_placement' && (data.type === 'tiled_roof' || data.type === 'asphalt_roof' || data.type === 'synthetic_roof' || data.type === 'straw_roofing' || data.type === 'sink_roof')) || data.type === 'roof_cleaning_demossing' -->
<div class="form-group form-group-radio" sd-field-id="data.project_date" ng-class="{'has-error has-feedback': (submitted.indexOf(formScope.step) >= 0) && getField('data.project_date').$invalid}">
<label for="data.project_date" class="col-sm-4 col-md-5 control-label
"> Date de début </label>
<div class="col-xs-12 col-sm-8 col-md-7">
<div class="radio-btns-container">
<div class="radio">
<label>
<input type="radio" name="data.project_date" value="0-1_month" ng-model="data.project_date" required="" class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required">
<span class="radio-label"> Dans un délai d'un mois <span ng-class="{'glyphicon glyphicon-remove': (submitted.indexOf(formScope.step) >= 0) && getField('data.project_date').$invalid}"></span>
</span>
</label>
</div>
<div class="radio">
<label>
<input type="radio" name="data.project_date" value="1-3_month" ng-model="data.project_date" required="" class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required">
<span class="radio-label"> Dans un délai de 1 à 3 mois </span>
</label>
</div>
<div class="radio">
<label>
<input type="radio" name="data.project_date" value="3-6_month" ng-model="data.project_date" required="" class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required">
<span class="radio-label"> Dans les 3 à 6 mois </span>
</label>
</div>
<div class="radio">
<label>
<input type="radio" name="data.project_date" value="unknown" ng-model="data.project_date" required="" class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required">
<span class="radio-label"> Sans préférence </span>
</label>
</div>
</div>
<div class="text-danger ng-hide" sd-messages="getErrorForField('data.project_date')" ng-show="getErrorClassForField('data.project_date')">
<div class="error" sd-message="required" style="display: none;"> Veuillez indiquer une date de début souhaitée </div>
</div>
</div>
</div>
<div class="form-group form-group-radio" sd-field-id="showOptionalFileInput" ng-class="{'has-error has-feedback': (submitted.indexOf(formScope.step) >= 0) && getField('showOptionalFileInput').$invalid}">
<label for="showOptionalFileInput" class="col-sm-4 col-md-5 control-label
"> Souhaitez-vous ajouter des photos ? <label class="sub-label">Aucune photo à portée de main? Aucun problème</label>
</label>
<div class="col-xs-12 col-sm-8 col-md-7">
<div class="radio-btns-container">
<div class="radio">
<label>
<input type="radio" name="showOptionalFileInput" value="false" ng-model="showOptionalFileInput" required="" ng-init="showOptionalFileInput = "false""
class="ng-pristine ng-untouched ng-valid ng-not-empty ng-valid-required">
<span class="radio-label"> Non <span ng-class="{'glyphicon glyphicon-remove': (submitted.indexOf(formScope.step) >= 0) && getField('showOptionalFileInput').$invalid}"></span>
</span>
</label>
</div>
<div class="radio">
<label>
<input type="radio" name="showOptionalFileInput" value="true" ng-model="showOptionalFileInput" required="" ng-init="showOptionalFileInput = "false""
class="ng-pristine ng-untouched ng-valid ng-not-empty ng-valid-required">
<span class="radio-label"> Oui </span>
</label>
</div>
</div>
<div class="text-danger ng-hide" sd-messages="getErrorForField('showOptionalFileInput')" ng-show="getErrorClassForField('showOptionalFileInput')">
<div class="error " sd-message="required" style="display: none;"> showOptionalFileInput.error </div>
</div>
</div>
</div>
<div class="form-group form-group-radio">
<div class="col-xs-12 col-sm-offset-4 col-sm-8 col-md-offset-5 col-md-7">
<!-- ngIf: showOptionalFileInput === 'true' -->
</div>
</div>
<script type="text/ng-template" id="image-upload.html"> <div class="file-input">
<button class="sd-mt-0_5 btn-default btn-block file-browse" type="button"
ng-click="$ctrl.browseFile()"
ng-disabled="$ctrl.uploadFiles.length >= $ctrl.maximumFiles">{{ $ctrl.buttonLabel }}
</button>
<input type="file" sd-ng-files ng-model="$ctrl.selectedFile" ng-change="$ctrl.fileChanged()"
ng-disabled="$ctrl.uploadFiles.length >= $ctrl.maximumFiles" accept="{{ $ctrl.acceptedMimeTypes }}">
<span ng-if="$ctrl.isFileInvalid" ng-class="{'error': $ctrl.isFileInvalid}"
class="file-sub-label">{{ $ctrl.buttonSubLabel }}</span>
</div>
<div class="uploaded-files" ng-if="$ctrl.uploadFiles.length > 0">
<div class="uploaded-file-item" ng-repeat="uploadFile in $ctrl.uploadFiles">
<div class="upload-file-name">{{ uploadFile.name }}</div>
<div ng-click="$ctrl.removeFile(uploadFile)" ng-if="uploadFile.status === $ctrl.uploadedStatus"
class="upload-file-delete"></div>
<div ng-if="uploadFile.status === $ctrl.uploadingStatus" class="upload-file-loader"></div>
</div>
</div>
</script>
<div class="form-group form-group-radio" sd-field-id="data.buyer_intention" ng-class="{'has-error has-feedback': (submitted.indexOf(formScope.step) >= 0) && getField('data.buyer_intention').$invalid}">
<label for="data.buyer_intention" class="col-sm-4 col-md-5 control-label
"> Avez-vous l'intention d'exécuter ce projet ? </label>
<div class="col-xs-12 col-sm-8 col-md-7">
<div class="radio-btns-container">
<div class="radio">
<label>
<input type="radio" name="data.buyer_intention" value="yes" ng-model="data.buyer_intention" required="" class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required">
<span class="radio-label"> Oui, après avoir comparé les artisans <span ng-class="{'glyphicon glyphicon-remove': (submitted.indexOf(formScope.step) >= 0) && getField('data.buyer_intention').$invalid}"></span>
</span>
</label>
</div>
<div class="radio">
<label>
<input type="radio" name="data.buyer_intention" value="unknown" ng-model="data.buyer_intention" required="" class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required">
<span class="radio-label"> Je ne suis pas encore sûr, cela dépend des informations que j'obtiens </span>
</label>
</div>
<div class="radio">
<label>
<input type="radio" name="data.buyer_intention" value="no" ng-model="data.buyer_intention" required="" class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required">
<span class="radio-label"> Non, je cherche seulement des informations </span>
</label>
</div>
</div>
<div class="text-danger ng-hide" sd-messages="getErrorForField('data.buyer_intention')" ng-show="getErrorClassForField('data.buyer_intention')">
<div class="error" sd-message="required" style="display: none;"> Veuillez sélectionner l'une des réponses ci-dessus. </div>
</div>
</div>
</div>
<!-- ngIf: data.buyer_intention === 'unknown' -->
<div class="form-group" sd-field-id="data.project_description" ng-class="{'has-error has-feedback': (submitted.indexOf(formScope.step) >= 0) && getField('data.project_description').$invalid}">
<label for="data.project_description" class="col-sm-4 col-md-5 control-label
col-xs-12
"> Description du projet <label class="sub-label">Décrivez brièvement votre projet et recevez des devis plus précis</label>
</label>
<div class="col-xs-12 col-sm-8 col-md-7">
<textarea class="form-control input-sm ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required ng-valid-minlength" placeholder="Décrivez votre projet. (Au moins 10 caractères)" ng-model="data.project_description"
name="data.project_description" rows="5" id="data.project_description" required="" ng-minlength="10" ng-model-options="{ updateOn:'change keyup', allowInvalid: true }"></textarea>
<div class="text-danger ng-hide" sd-messages="getErrorForField('data.project_description')" ng-show="getErrorClassForField('data.project_description')">
<div class="error" sd-message="required" style="display: none;"> Veuillez décrire votre projet. Utilisez au moins 10 caractères. </div>
<div class="error" sd-message="minlength" style="display: none;"> Veuillez décrire votre projet. Utilisez au moins 10 caractères. </div>
</div>
</div>
</div>
<div class="form-group">
<div class="col-xs-12 col-md-offset-5 col-md-7 col-sm-offset-4 col-sm-8">
<button type="button" id="proceed-to-final-step" class="btn-arrow-tail button upper" ng-class="{'loading':submitting}" ng-click="progress()"> Etape finale </button>
</div>
</div>
<div class="free form-group">
<div class="col-xs-12 col-md-offset-5 col-md-7 col-sm-offset-4 col-sm-8">
<div class="free text-center">
<span class="glyphicon glyphicon-ok checkmark"></span> Gratuit - Aucune Obligation
</div>
</div>
</div>
</div>
</fieldset>
<fieldset ng-disabled="formScope.step !== 3" disabled="disabled">
<div ng-form="" name="step3" ng-show="formScope.step === 3" class="ng-pristine ng-hide ng-invalid ng-invalid-required ng-valid-pattern ng-valid-email">
<!-- ngIf: loadingState.showMatchEncourageMessage -->
<dynamic-step3><!-- ngInclude: --><ng-include src="step3Url" class="ng-scope">
<!-- ngIf: data.type === "commercial"
|| data.type === "zakelijk"
|| data.type === "business"
|| data.business === "zakelijk"
|| data.request_type === "commercial"
|| data.business === "commercial"
|| data.business_type === "commercial"
|| data.type2 === "zakelijk" -->
<div class="visible-xs ng-scope">
<div class="form-group sd-mb-0">
<div class="col-xs-12 col-sm-8 col-sm-offset-4">
<p class="font-weight-bold p-large sd-mb-0">Nom et Coordonnées</p>
</div>
</div>
</div>
<div class="form-group form-group-radio ng-scope" sd-field-id="data.gender" ng-class="{'has-error has-feedback': (submitted.indexOf(formScope.step) >= 0) && getField('data.gender').$invalid}">
<label for="data.gender" class="col-sm-4 col-md-5 control-label
hidden-xs
"> Civilité </label>
<div class="col-xs-12 col-sm-8 col-md-7">
<div class="radio-btns-container">
<div class="radio">
<label>
<input type="radio" name="data.gender" value="1" ng-model="data.gender" required="" class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required">
<span class="radio-label"> M. <span ng-class="{'glyphicon glyphicon-remove': (submitted.indexOf(formScope.step) >= 0) && getField('data.gender').$invalid}"></span>
</span>
</label>
</div>
<div class="radio">
<label>
<input type="radio" name="data.gender" value="2" ng-model="data.gender" required="" class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required">
<span class="radio-label"> Mme </span>
</label>
</div>
</div>
<div class="text-danger ng-hide" sd-messages="getErrorForField('data.gender')" ng-show="getErrorClassForField('data.gender')">
<div class="error" sd-message="required" style="display: none;"> Veuillez indiquer votre civilité </div>
</div>
</div>
</div>
<div class="form-group ng-scope" sd-field-id="data.firstname"
ng-class="{'has-error has-feedback': getErrorClassForField('data.firstname'), 'has-success has-feedback': getField('data.firstname').$touched && getField('data.firstname').$valid}">
<label for="data.firstname" class="col-sm-4 col-md-5 control-label
hidden-xs
"> Prénom </label>
<div class="placeholder-container col-xs-12 col-sm-8 col-md-7 input-text">
<input type="text" class="input-sm form-control hide-placeholder ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required ng-valid-pattern" placeholder="Prénom" ng-model="data.firstname" name="data.firstname"
id="data.firstname" required="" clearable="" pattern="([.-0-9A-zÀ-ÖØ-öø-įĴ-őŔ-žǍ-ǰǴ-ǵǸ-țȞ-ȟȤ-ȳɃɆ-ɏḀ-ẞƀ-ƓƗ-ƚƝ-ơƤ-ƥƫ-ưƲ-ƶẠ-ỿ' ]){2,}">
<span aria-hidden="true" ng-class="
{
'glyphicon glyphicon-remove form-control-feedback': getErrorClassForField('data.firstname'),
'glyphicon glyphicon-ok form-control-feedback': getField('data.firstname').$touched && getField('data.firstname').$valid,
'sd-pending form-control-feedback': getField('data.firstname').$pending
}
"></span>
<div class="text-danger ng-hide" sd-messages="getErrorForField('data.firstname')" ng-show="getErrorClassForField('data.firstname')">
<div class="error" sd-message="required" style="display: none;"> Veuillez indiquer votre prénom </div>
<div class="error" sd-message="pattern" style="display: none;"> Veuillez indiquer un prénom valide </div>
</div>
</div>
</div>
<div class="form-group ng-scope" sd-field-id="data.name" ng-class="{'has-error has-feedback': getErrorClassForField('data.name'), 'has-success has-feedback': getField('data.name').$touched && getField('data.name').$valid}">
<label for="data.name" class="col-sm-4 col-md-5 control-label
hidden-xs
"> Nom </label>
<div class="placeholder-container col-xs-12 col-sm-8 col-md-7 input-text">
<input type="text" class="input-sm form-control hide-placeholder ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required ng-valid-pattern" placeholder="Nom" ng-model="data.name" name="data.name" id="data.name" required=""
clearable="" pattern="([.-0-9A-zÀ-ÖØ-öø-įĴ-őŔ-žǍ-ǰǴ-ǵǸ-țȞ-ȟȤ-ȳɃɆ-ɏḀ-ẞƀ-ƓƗ-ƚƝ-ơƤ-ƥƫ-ưƲ-ƶẠ-ỿ' ]){2,}">
<span aria-hidden="true" ng-class="
{
'glyphicon glyphicon-remove form-control-feedback': getErrorClassForField('data.name'),
'glyphicon glyphicon-ok form-control-feedback': getField('data.name').$touched && getField('data.name').$valid,
'sd-pending form-control-feedback': getField('data.name').$pending
}
"></span>
<div class="text-danger ng-hide" sd-messages="getErrorForField('data.name')" ng-show="getErrorClassForField('data.name')">
<div class="error" sd-message="required" style="display: none;"> Veuillez indiquer votre nom </div>
<div class="error" sd-message="pattern" style="display: none;"> Veuillez indiquer un nom valide </div>
</div>
</div>
</div>
<div class="form-group ng-scope">
<div class="col-xs-12 col-sm-8 col-md-7 col-md-offset-5 col-sm-offset-4">
<p class="font-weight-bold p-large sd-mb-0_25 sd-mb-sm-0_5">Coordonnées</p>
<p class="sd-m-0">Nos artisans vous contactent souvent d'abord par téléphone afin de vous établir un devis personnalisé. Cette démarche est sans engagement.</p>
</div>
</div>
<div class="sd-mb-1_5 sd-mb-md-0 ng-scope">
<div class="form-group" sd-field-id="data.phone_number"
ng-class="{'has-error has-feedback': getErrorClassForField('data.phone_number'), 'has-success has-feedback': getField('data.phone_number').$touched && getField('data.phone_number').$valid}">
<label for="data.phone_number" class="col-sm-4 col-md-5 control-label
hidden-xs
"> Numéro de téléphone </label>
<div class="placeholder-container col-xs-12 col-sm-8 col-md-7 input-tel">
<input type="tel" class="input-sm form-control hide-placeholder ng-pristine ng-untouched ng-isolate-scope ng-empty ng-invalid ng-invalid-required" placeholder="Numéro de téléphone" ng-model="data.phone_number"
name="data.phone_number" id="data.phone_number" required="" remote-validation="https://skyapi.skydreams.com/1.0/form/validate/phone/CH">
<span aria-hidden="true" ng-class="
{
'glyphicon glyphicon-remove form-control-feedback': getErrorClassForField('data.phone_number'),
'glyphicon glyphicon-ok form-control-feedback': getField('data.phone_number').$touched && getField('data.phone_number').$valid,
'sd-pending form-control-feedback': getField('data.phone_number').$pending
}
"></span>
<!-- ngIf: !getErrorClassForField('data.phone_number') -->
<div class="description ng-scope" ng-if="!getErrorClassForField('data.phone_number')">
<div ng-class="{'text-danger': getErrorClassForField('data.phone_number')}" class="animated">
<div>Votre numéro de téléphone est uniquement partagé avec les sociétés Nous vous enverrons un SMS ou vous appellerons pour vérifier votre numéro.</div>
</div>
</div><!-- end ngIf: !getErrorClassForField('data.phone_number') -->
<div class="text-danger ng-hide" sd-messages="getErrorForField('data.phone_number')" ng-show="getErrorClassForField('data.phone_number')">
<div class="error" sd-message="required" style="display: none;"> Veuillez entrer votre numéro de téléphone </div>
<div class="error" sd-message="remote" style="display: none;"> Veuillez entrer un numéro de téléphone valide </div>
</div>
</div>
</div>
<div class="form-group" sd-field-id="data.email" ng-class="{'has-error has-feedback': getErrorClassForField('data.email'), 'has-success has-feedback': getField('data.email').$touched && getField('data.email').$valid}">
<label for="data.email" class="col-sm-4 col-md-5 control-label
hidden-xs
"> E-mail </label>
<div class="placeholder-container col-xs-12 col-sm-8 col-md-7 input-email">
<input type="email" class="input-sm form-control hide-placeholder ng-pristine ng-untouched ng-isolate-scope ng-empty ng-valid-email ng-invalid ng-invalid-required" placeholder="E-mail" ng-model="data.email" name="data.email"
id="data.email" required="" remote-validation="https://skyapi.skydreams.com/1.0/form/validate/email" clearable="">
<span aria-hidden="true" ng-class="
{
'glyphicon glyphicon-remove form-control-feedback': getErrorClassForField('data.email'),
'glyphicon glyphicon-ok form-control-feedback': getField('data.email').$touched && getField('data.email').$valid,
'sd-pending form-control-feedback': getField('data.email').$pending
}
"></span>
<!-- ngIf: !getErrorClassForField('data.email') -->
<div class="description ng-scope" ng-if="!getErrorClassForField('data.email')">
<div ng-class="{'text-danger': getErrorClassForField('data.email')}" class="animated">
<div>Les sociétés vous enverront leur devis par email</div>
</div>
</div><!-- end ngIf: !getErrorClassForField('data.email') -->
<div class="text-danger ng-hide" sd-messages="getErrorForField('data.email')" ng-show="getErrorClassForField('data.email')">
<div class="error" sd-message="required" style="display: none;"> Veuillez entrer votre adresse e-mail </div>
<div class="error" sd-message="email" style="display: none;"> Veuillez entrer votre adresse e-mail </div>
<div class="error" sd-message="remote" style="display: none;"> Veuillez entrer votre adresse e-mail </div>
</div>
</div>
</div>
</div>
</ng-include></dynamic-step3>
<div class="form-group">
<div class="col-xs-12 col-md-offset-5 col-md-7 col-sm-offset-4 col-sm-8">
<button type="button" id="request-quotes" class="btn-block button upper d-flex justify-content-center align-items-center" ng-class="{'loading':submitting}" ng-click="progress(true)" ng-disabled="submitting">
<div>Recevez des devis</div>
</button>
</div>
</div>
<div class="free form-group">
<div class="col-xs-12 col-md-offset-5 col-md-7 col-sm-offset-4 col-sm-8">
<div class="free text-center">
<span class="glyphicon glyphicon-ok checkmark"></span> Gratuit - Aucune Obligation
</div>
</div>
</div>
</div>
</fieldset>
</div>
</div>
</form>
<form ng-submit="openForm()" class="d-flex flex-column flex-sm-row ng-pristine ng-valid">
<div class="sd-mb-0_5 sd-mb-sm-0 lead text-gray sd-mr-sm-0_5 flex-even">
<input ng-model="data.postcode" ng-class="{ 'invalid-state': showErrorMessage() }" name="postcode" class="form-control upper ng-pristine ng-untouched ng-valid ng-empty" type="text" ng-change="formScope.step = 1" placeholder="Votre code postal">
</div>
<div class="flex-even">
<button type="submit" class="btn-arrow-tail" id="pagecenter-cta">Ok</button>
</div>
</form>
<form ng-submit="openForm()" class="d-flex flex-column flex-sm-row ng-pristine ng-valid">
<div class="sd-mb-0_5 sd-mb-sm-0 lead text-gray sd-mr-sm-0_5 flex-even">
<input ng-model="data.postcode" ng-class="{ 'invalid-state': showErrorMessage() }" name="postcode" class="form-control upper ng-pristine ng-untouched ng-valid ng-empty" type="text" ng-change="formScope.step = 1" placeholder="Votre code postal">
</div>
<div class="flex-even">
<button type="submit" class="btn-arrow-tail" id="pagecenter-cta">Ok</button>
</div>
</form>
Text Content
Nous utilisons des cookies pour offrir et améliorer nos services. En fermant cet avis ou en continuant à naviguer sur le site, vous acceptez l'utilisation de cookies. En savoir plus. 1 million de clients satisfaits 230+ sociétés de toiture Enregistrer une société de toiture COMPAREZ DEVIS TOITURE TROUVEZ LE COUVREUR POUR VOTRE PROJET Ok Gratuit - Aucune Obligation 1 Localisation 2 Projet 3 Envoyer la demande OÙ SERA RÉALISÉ VOTRE PROJET ? QUELS SONT LES DÉTAILS DE VOTRE PROJET ? RECEVEZ DES DEVIS GRATUITS DE SOCIÉTÉS DE TOITURE Code postal Veuillez indiquer un code postal valide Veuillez indiquer un code postal valide Ville Veuillez indiquer votre ville Rue Veuillez indiquer le nom de votre rue N°/Nom de la résidence Etape 2 Gratuit - Aucune Obligation Type de projet Pose des tuiles Installation d'un toit en bitume Installation d'un toit synthétique/EPDM Remplacer ou réparer les gouttières / tuyaux de descente Nettoyage des gouttières Installation d'un toit en zinc Installation d'un toit de chaume Nettoyage des toits / démoussage Veuillez sélectionner le type de projet Date de début Dans un délai d'un mois Dans un délai de 1 à 3 mois Dans les 3 à 6 mois Sans préférence Veuillez indiquer une date de début souhaitée Souhaitez-vous ajouter des photos ? Aucune photo à portée de main? Aucun problème Non Oui showOptionalFileInput.error Avez-vous l'intention d'exécuter ce projet ? Oui, après avoir comparé les artisans Je ne suis pas encore sûr, cela dépend des informations que j'obtiens Non, je cherche seulement des informations Veuillez sélectionner l'une des réponses ci-dessus. Description du projet Décrivez brièvement votre projet et recevez des devis plus précis Veuillez décrire votre projet. Utilisez au moins 10 caractères. Veuillez décrire votre projet. Utilisez au moins 10 caractères. Etape finale Gratuit - Aucune Obligation Nom et Coordonnées Civilité M. Mme Veuillez indiquer votre civilité Prénom Veuillez indiquer votre prénom Veuillez indiquer un prénom valide Nom Veuillez indiquer votre nom Veuillez indiquer un nom valide Coordonnées Nos artisans vous contactent souvent d'abord par téléphone afin de vous établir un devis personnalisé. Cette démarche est sans engagement. Numéro de téléphone Votre numéro de téléphone est uniquement partagé avec les sociétés Nous vous enverrons un SMS ou vous appellerons pour vérifier votre numéro. Veuillez entrer votre numéro de téléphone Veuillez entrer un numéro de téléphone valide E-mail Les sociétés vous enverront leur devis par email Veuillez entrer votre adresse e-mail Veuillez entrer votre adresse e-mail Veuillez entrer votre adresse e-mail Recevez des devis Gratuit - Aucune Obligation Le site web de toiture numéro 1 en Suisse Dernière demande générée il y a 7 minutes 189 demandes générées aujourd'hui 1 million de clients ravis SSL Site Sécurisé COMPAREZ DES SOCIÉTÉS DE TOITURE TELLES QUE: POURQUOI TOITURE24.CH? ECONOMISEZ 40% Sur votre projet GAGNEZ DU TEMPS Seulement 1 minute RECEVEZ PLUSIEURS DEVIS De sociétés locales de confiance RECEVEZ DES OFFRES GRATUITES ET ÉCONOMISEZ JUSQU'À 40% Ok CE QU'EN PENSENT NOS UTILISATEURS "SERVICE GÉNIAL ET DE CONFIANCE !" Définitivement le meilleur endroit pour trouver un professionel qualifié. Ce service est très efficace et facile d'utilisation. Il m'a suffi de sélectionner le devis qui me convenait le mieux ! Excellent service. Encore merci ! - Pierre Martin "UNE TRÈS BONNE VALEUR AJOUTÉE" Toiture24.ch m'a aidé à trouver un très bon professionel pour mon projet. Après avoir comparé différentes entreprises j'ai pu choisir le meilleur devis en seulement quelques minutes ! - M. Lambert RECEVEZ DES OFFRES GRATUITES ET ÉCONOMISEZ JUSQU'À 40% Ok POURQUOI NOUS CHOISIR ? #1 Site de toiture 1 million de clients ravis + de 15 ans d'expérience + de 230 sociétés de toiture ETES-VOUS UNE SOCIÉTÉ DE TOITURE? Obtenez votre Essai Gratuit maintenant × Accueil Ce que nous faisons Confidentialité Contact Enregistrer une société de toiture Envoyez une demande pour recevoir des devis gratuits. Comparez jusqu'à 5 sociétés et sélectionnez le devis qui répond le plus à vos attentes. POUR LES CLIENTS * Accueil * Ce que nous faisons * Confidentialité * Mentions légales * Contact POUR LES SOCIÉTÉS * Fonctionnement * Essai gratuit BESOIN DE RENSEIGNEMENTS? info@toiture24.ch © Copyright 2023 - Toiture24.ch. Tous droits réservés