28 June 2023

How to use form validations(Jquery validations) in step form?

<!DOCTYPE html>
<html>
<head>
<title>Multi-file Upload</title>
<style>
fieldset {
  display: none;
}

fieldset:first-child {
  display: block;
}

button {
  margin-top: 10px;
}

.prev {
  margin-right: 10px;
}
.drop-zone {
  border: 2px dashed #ccc;
  width: 300px;
  height: 200px;
  padding: 20px;
  text-align: center;
  cursor: pointer;
}
.file-preview {
  display: flex;
  flex-wrap: wrap;
  margin-top: 10px;
}
.file-item {
  display: flex;
  align-items: center;
  margin-right: 10px;
  margin-bottom: 10px;
}
.file-item img {
  width: 50px;
  height: 50px;
  margin-right: 5px;
}
.remove-btn {
  cursor: pointer;
  color: red;
  font-weight: bold;
}
.file_preview_error{
  color:red;
}
.error{
  color:red;
  display:block;
}
</style>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="https://cdn.jsdelivr.net/jquery.validation/1.16.0/jquery.validate.min.js"></script>
<script>
$(document).ready(function() {
  // Initialize validation for the form
  $('#stepForm').validate({
    rules: {
      name: 'required',
      email: {
        required: true,
        email: true
      },
      password: {
        required: true,
        minlength: 6
      },
      confirmPassword: {
        required: true,
        equalTo: '#password'
      },
      username: 'required',
      address: 'required',
      city: 'required'
    },
    messages: {
      // Customize error messages for each field if needed
    },
    errorPlacement: function(error, element) {
      // Customize error placement if needed
      error.insertAfter(element);
    }
  });
  function thirdStepJqueryValidations(){
    $("#stepForm").validate({
      rules: {
        username: "required",
        },
      // In 'messages' user have to specify message as per rules
      messages: {
        username: "Username is required."
      }
    });
    return $("#stepForm").valid();
  }
  // Step navigation
  var currentStep = 0;
  var fieldsets = $('#stepForm fieldset');
  var stepsCount = fieldsets.length;

  function navigateTo(step) {
    // Hide all fieldsets
    fieldsets.hide();
    // Show the selected step
    $(fieldsets[step]).fadeIn('slow');
    // Disable previous button if on the first step
    $('.prev').prop('disabled', step === 0);
    // Change the text of the next button on the last step
    if (step === stepsCount - 1) {
      $('.next').text('Submit');
    } else {
      $('.next').text('Next');
    }
  }
  function dropFileValidation(){
    var dropZone = $('#file_preview');
    $(".file_preview_error").text("");
    if (dropZone.is(':empty')) {
        // The drop zone is empty
        // Perform your validation logic here or take appropriate actions
  /*       console.log("The drop zone is empty."); */
        $(".file_preview_error").text("This field is required.");
        return false;
      }
    return true;
  }
  $('.next').click(function() {
      console.log(currentStep);
      if(currentStep == 2){
        if(!thirdStepJqueryValidations() || !dropFileValidation()) {
          dropFileValidation();
          return false;
        }
      }
    if ($('#stepForm').valid()) {
        currentStep++;
        navigateTo(currentStep);
    }
  });
  $('.prev').click(function() {
    currentStep--;
    navigateTo(currentStep);
  });
});

window.addEventListener("DOMContentLoaded", () => {
  const dropZone = document.getElementById("dropzone");
  const filePreview = document.getElementById("file_preview");
  // Handle file drop
  dropZone.addEventListener("drop", (e) => {
    e.preventDefault();
    const files = e.dataTransfer.files;
    handleFiles(files);
  });
  // Handle file drag over
  dropZone.addEventListener("dragover", (e) => {
    e.preventDefault();
  });
  // Handle file input change
  dropZone.addEventListener("click", () => {
    const fileInput = document.createElement("input");
    fileInput.type = "file";
    fileInput.multiple = true;
    fileInput.accept = "image/*";
    fileInput.addEventListener("change", (e) => {
      $(".file_preview_error").text("");
      const files = e.target.files;
      handleFiles(files);
    });
    fileInput.click();
  });
  // Handle file removal
  filePreview.addEventListener("click", (e) => {
    if (e.target.classList.contains("remove-btn")) {
      const fileItem = e.target.parentElement;
      const fileName = fileItem.getAttribute("data-file-name");
      fileItem.remove();
    }
  });
  function handleFiles(files) {
    for (const file of files) {
      const reader = new FileReader();
      reader.onload = (e) => {
        const fileContent = e.target.result;
        displayFile(file, fileContent);
      };
      reader.readAsDataURL(file);
    }
  }
  function displayFile(file, fileContent) {
    const fileItem = document.createElement("div");
    fileItem.classList.add("file-item");
    fileItem.setAttribute("data-file-name", file.name);
    const image = document.createElement("img");
    image.src = fileContent;
    // Create the input element
    const inputElement = document.createElement("input");
    // Set the input type and value attributes
    inputElement.setAttribute("type", "hidden");
    inputElement.setAttribute("name", "files[]");
    inputElement.setAttribute("value", fileContent + "?filename=" + file.name);
    const fileName = document.createElement("span");
    fileName.innerText = file.name;
    const removeBtn = document.createElement("span");
    removeBtn.classList.add("remove-btn");
    removeBtn.innerText = "Remove";
    fileItem.appendChild(image);
    fileItem.appendChild(inputElement);
    fileItem.appendChild(fileName);
    fileItem.appendChild(removeBtn);
    filePreview.appendChild(fileItem);
  }
});
</script>
</head>
<body>
<form id="stepForm" method="post">
  <fieldset>
    <h2>Step 1</h2>
    <input type="text" name="name" id="name" placeholder="Name">
    <input type="email" name="email" id="email" placeholder="Email">
    <button type="button" class="next">Next</button>
  </fieldset>
  <fieldset>
    <h2>Step 2</h2>
    <input type="password" name="password" id="password" placeholder="Password">
    <input type="password" name="confirmPassword" id="confirmPassword" placeholder="Confirm Password">
    <button type="button" class="prev">Previous</button>
    <button type="button" class="next">Next</button>
  </fieldset>
  <fieldset>
    <h2>Uploader</h2>
    <input type="text" name="username" >
    <div class="drop-zone" id="dropzone">
    <span>Drag and drop files here</span>
  </div>
  <div class="file-preview" id="file_preview"></div>
  <div class="file_preview_error"></div>

    <button type="button" class="prev">Previous</button>
    <button type="button" class="next">Next</button>
  </fieldset>
  <fieldset>
    <h2>Step 3</h2>
    <input type="text" name="address" id="address" placeholder="Address">
    <input type="text" name="city" id="city" placeholder="City">
    <button type="button" class="prev">Previous</button>
    <button type="submit">Submit</button>
  </fieldset>
</form>
</body>
</html>

 

No comments:

Post a Comment

How to create youtube videos slider with play and pause option in wordpress?

Create youtube videos slider with play and pause option in wordpress youtube videos slider Use this shortcode:- [punjab_today] function my_...