Last active
December 30, 2024 06:21
-
-
Save imamnurhy/1734a8e81adbd00d800e1561d977cfe2 to your computer and use it in GitHub Desktop.
Form with Jquery
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <form id="form-filter" method="POST"> | |
| @csrf | |
| @method('POST') | |
| <div id="alert"></div> | |
| <div class="row col-md-12 mt-1 mb-2"> | |
| <div class="col-md-1 p-1"> | |
| <div class="mt-3 ml-1 float-right"> | |
| <strong><i class="icon-filter"></i> FILTER </strong> | |
| </div> | |
| </div> | |
| <div class="column col-md-9"> | |
| <div class="form-row m-2"> | |
| <div class="col-md-6"> | |
| <div class="form-group m-1"> | |
| <label for="filter-dari_tanggal" class="col-form-label s-12"> | |
| Dari Tanggal | |
| </label> | |
| <div class="input-group"> | |
| <input name="dari_tanggal" class="form-control date-time-picker" | |
| id="filter-dari_tanggal" value="{{ date('Y-m-01') }}" /> | |
| <span class="input-group-append"> | |
| <span class="input-group-text add-on white"> | |
| <i class="icon-calendar"></i> | |
| </span> | |
| </span> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="col-md-6"> | |
| <div class="form-group m-1"> | |
| <label for="filter-sampai_tanggal" class="col-form-label s-12"> | |
| Sampai Tanggal | |
| </label> | |
| <div class="input-group"> | |
| <input name="sampai_tanggal" class="form-control date-time-picker" | |
| id="filter-sampai_tanggal" value="{{ date('Y-m-d') }}" /> | |
| <span class="input-group-append"> | |
| <span class="input-group-text add-on white"> | |
| <i class="icon-calendar"></i> | |
| </span> | |
| </span> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="col-md-2 p-1 mt-3"> | |
| <div class="row"> | |
| <div class="col-10 p-1 d-flex"> | |
| <button type="button" class="btn btn-primary btn-sm col-12" | |
| title="Cari data" id="filter-btn"> | |
| <i class="icon-search mr-1"></i>Cari data | |
| </button> | |
| </div> | |
| <div class="col-2 m-0 p-0 d-flex justify-content-center align-items-center"> | |
| <a id="filter-btn_reset" title="Reset Filter"> | |
| <i class="icon-history s-24"></i> | |
| </a> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </form> | |
| <script type="text/javascript"> | |
| $('#filter-btn').on('click', function() { | |
| table.api().ajax.reload(); | |
| }); | |
| $('#filter-btn_reset').on('click', function() { | |
| $('#filter-form').trigger('reset'); | |
| table.api().ajax.reload(); | |
| }); | |
| $('#filter-dari_tanggal').datetimepicker({ | |
| format: 'Y-m-d', | |
| timepicker: false, | |
| datepicker: true, | |
| onShow: function(ct) { | |
| this.setOptions({ | |
| maxDate: $('#filter-sampai_tanggal').val() ? $('#filter-sampai_tanggal').val() : | |
| false | |
| }) | |
| }, | |
| }); | |
| $('#filter-sampai_tanggal').datetimepicker({ | |
| format: 'Y-m-d', | |
| timepicker: false, | |
| datepicker: true, | |
| onShow: function(ct) { | |
| this.setOptions({ | |
| minDate: $('#filter-dari_tanggal').val() ? $('#filter-dari_tanggal').val() : false | |
| }) | |
| }, | |
| }); | |
| </script> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <style> | |
| .modal-loader { | |
| border: 5px solid #f3f3f3; | |
| border-radius: 50%; | |
| border-top: 5px solid #3498db; | |
| width: 38px; | |
| height: 38px; | |
| -webkit-animation: spin 1s linear infinite; | |
| /* Safari */ | |
| animation: spin 1s linear infinite; | |
| } | |
| /* Safari */ | |
| @-webkit-keyframes spin { | |
| 0% { | |
| -webkit-transform: rotate(0deg); | |
| } | |
| 100% { | |
| -webkit-transform: rotate(360deg); | |
| } | |
| } | |
| @keyframes spin { | |
| 0% { | |
| transform: rotate(0deg); | |
| } | |
| 100% { | |
| transform: rotate(360deg); | |
| } | |
| } | |
| </style> | |
| <!-- Modal Loader --> | |
| <div class="modal show" id="modal-loader" tabindex="-1" role="dialog" data-backdrop="static" | |
| data-keyboard="false"> | |
| <div class="modal-dialog modal-dialog-centered d-flex justify-content-center" role="document"> | |
| <div class="card"> | |
| <div class="card-body p-2"> | |
| <div class="text-center"> | |
| <div class="modal-loader"></div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| //=== FORM FILTER ===// | |
| $('#form-filter button[type="submit"]').on('click', function () { | |
| $('#form-filter').data('url', $(this).data('url')); | |
| }); | |
| $('#form-filter').on('submit', function (e) { | |
| if ($(this)[0].checkValidity() === false) { | |
| e.preventDefault(); | |
| e.stopPropagation(); | |
| } else { | |
| $('#form-filter button[type="submit"]').attr('disabled', true); | |
| $.ajax({ | |
| url: $(this).data('url'), | |
| type: 'POST', | |
| data: new FormData($(this)[0]), | |
| contentType: false, | |
| processData: false, | |
| beforeSend: function () { | |
| setTimeout(function () { | |
| $('#modal-loader').modal('show'); | |
| }, 100); | |
| }, | |
| xhr: function () { | |
| var xhr = new XMLHttpRequest(); | |
| xhr.responseType = 'blob'; | |
| return xhr; | |
| }, | |
| success: function (response, status, xhr) { | |
| var filename = ""; | |
| var disposition = xhr.getResponseHeader('Content-Disposition'); | |
| // Mencari nama file dari header Content-Disposition | |
| if (disposition && disposition.indexOf('attachment') !== -1) { | |
| var filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/; | |
| var matches = filenameRegex.exec(disposition); | |
| if (matches != null && matches[1]) filename = matches[1].replace(/['"]/g, ''); | |
| } | |
| // Mendapatkan tipe konten dari respons | |
| var contentType = xhr.getResponseHeader('Content-Type'); | |
| var blob = new Blob([response], { type: contentType }); | |
| // Penanganan berdasarkan jenis konten | |
| if (contentType.toLowerCase().indexOf('application/pdf') !== -1) { | |
| // Jika tipe konten adalah PDF, buka tab baru untuk melihat PDF | |
| var fileUrl = window.URL ? window.URL.createObjectURL(blob) : window.webkitURL.createObjectURL(blob); | |
| window.open(fileUrl, '_blank'); | |
| } else { | |
| // Jika bukan PDF, lakukan proses unduhan | |
| if (typeof window.navigator.msSaveBlob !== 'undefined') { | |
| // Internet Explorer | |
| window.navigator.msSaveBlob(blob, filename); | |
| } else { | |
| // Bukan Internet Explorer | |
| var downloadUrl = window.URL ? window.URL.createObjectURL(blob) : window.webkitURL.createObjectURL(blob); | |
| if (filename) { | |
| // Gunakan atribut HTML5 <a download> untuk menentukan nama file | |
| var a = document.createElement("a"); | |
| if (typeof a.download === 'undefined') { | |
| // Safari tidak mendukung atribut download, navigasi ke URL unduhan | |
| window.location = downloadUrl; | |
| } else { | |
| // Mengatur atribute href dan download, dan melakukan klik pada elemen a | |
| a.href = downloadUrl; | |
| a.download = filename; | |
| document.body.appendChild(a); | |
| a.click(); | |
| document.body.removeChild(a); | |
| } | |
| } else { | |
| // Jika tidak ada nama file, gunakan URL untuk mengunduh file | |
| window.location = downloadUrl; | |
| } | |
| // Membersihkan URL object setelah beberapa saat | |
| setTimeout(function () { | |
| if (window.URL) { | |
| window.URL.revokeObjectURL(downloadUrl); | |
| } else { | |
| window.webkitURL.revokeObjectURL(downloadUrl); | |
| } | |
| }, 100); | |
| } | |
| } | |
| }, | |
| error: function (error) { | |
| alert('Kesalahan Saat Export Data'); | |
| } | |
| }).done(function () { | |
| $('#form-filter button[type="submit"]').removeAttr('disabled'); | |
| setTimeout(function () { | |
| $('#modal-loader').modal('hide'); | |
| }, 1000); | |
| }).fail(function () { | |
| $('#form-filter button[type="submit"]').removeAttr('disabled'); | |
| $('#modal-loader').modal('hide'); | |
| }) | |
| return false; | |
| } | |
| $(this).addClass('was-validated'); | |
| }); | |
| //=== FORM SUBMIT ===// | |
| $('#form').on('submit', function (e) { | |
| event.preventDefault(); | |
| const form = $(this); | |
| const submitButton = form.find('#btn-save'); | |
| const alert = form.find('#alert'); | |
| var url = form.data('url-store'); | |
| var method = $('input[name=_method]').val(); | |
| if (method === 'PATCH') { | |
| url = $(this).data('url-update').replace(':id', $('#id').val()); | |
| } | |
| if (form[0].checkValidity() === false) { | |
| form.addClass('was-validated'); | |
| } else { | |
| form.find('#alert').html(''); | |
| form.find('#btn-save').attr('disabled', true); | |
| $.ajax({ | |
| url: url, | |
| type: 'POST', | |
| data: new FormData(form[0]), | |
| contentType: false, | |
| processData: false, | |
| beforeSend: function () { | |
| $('#modal-loader').modal('show'); | |
| form.find('#alert').html(''); | |
| form.find('#btn-save').attr('disabled', true); | |
| }, | |
| success: function (data) { | |
| form.find('#alert').html(successMessageFormat(data)); | |
| table.api().ajax.reload(); | |
| }, | |
| error: function (xhr) { | |
| form.find('#alert').html(errorMessageFormat(xhr)); | |
| form.find('#btn-save').removeAttr('disabled'); | |
| } | |
| }).done(function () { | |
| $('#modal-loader').modal('hide'); | |
| form.find('#btn-save').removeAttr('disabled'); | |
| form.find('#btn-cancel').trigger('click'); | |
| }).fail(function () { | |
| $('#modal-loader').modal('hide'); | |
| form.find('#btn-save').removeAttr('disabled'); | |
| }) | |
| return false; | |
| } | |
| form.addClass('was-validated'); | |
| }); | |
| function edit(e) { | |
| $('#alert').html(''); | |
| $('#form-title').html("Mohon tunggu beberapa saat..."); | |
| $('#form-textAction').html(" Perubahan"); | |
| $('input[name=_method]').val('PATCH'); | |
| $('#btn-cancel').show(); | |
| $.ajax({ | |
| url: $(e).data('url'), | |
| type: 'GET', | |
| dataType: 'JSON', | |
| success: function (data) { | |
| $('#form-title').html('Edit'); | |
| $('#id').val(data.id); | |
| $('#name').val(data.name).focus(); | |
| }, | |
| error: function () { | |
| reload(); | |
| } | |
| }); | |
| } | |
| function remove(e) { | |
| $.confirm({ | |
| title: '', | |
| content: 'Apakah Anda yakin akan menghapus data ini?', | |
| icon: 'icon icon-question amber-text', | |
| theme: 'modern', | |
| closeIcon: true, | |
| animation: 'scale', | |
| type: 'red', | |
| buttons: { | |
| ok: { | |
| text: 'ok!', | |
| btnClass: 'btn-primary', | |
| keys: ['enter'], | |
| action: function () { | |
| $.ajax({ | |
| url: $(e).data('url'), | |
| type: 'POST', | |
| data: { | |
| '_method': 'DELETE', | |
| '_token': $('meta[name="csrf-token"]').attr('content') | |
| }, | |
| success: function (data) { | |
| table.api().ajax.reload(); | |
| }, | |
| error: function () { | |
| reload(); | |
| } | |
| }); | |
| } | |
| }, | |
| cancel: function () { | |
| console.log('the user clicked cancel'); | |
| } | |
| } | |
| }); | |
| } | |
| function reset(e) { | |
| const form = $(e).closest('form'); | |
| form[0].reset(); | |
| form.find('input[name=_method]').val('POST'); | |
| form.find('.select2').val('').trigger('change'); | |
| form.find('#form-title').html("Tambah"); | |
| form.find('#form-textAction').html(''); | |
| form.find('#btn-cancel').hide(); | |
| form.find('#btn-reset').show(); | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <form class="needs-validation" id="form" method="POST" novalidate data-url-store="{{ route($route . 'store') }}" data-url-update="{{ route($route . 'update', ':id') }}"> | |
| @csrf | |
| @method('POST') | |
| <input type="text" style="display: none" id="id" name="id" /> | |
| <div id="alert"></div> | |
| <div class="card"> | |
| <div class="card-header"> | |
| <div class="row"> | |
| <div class="col-md-10"> | |
| <h6> | |
| <strong> | |
| <span id="form-title">Tambah </span> | |
| </strong> | |
| </h6> | |
| </div> | |
| <div class="col-md-2"> | |
| <a href='#' class='btn btn-outline-primary btn-xs float-right' style="display: none;" id="btn-cancel" onclick='reset(this)'>Batal</a> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="card-body"> | |
| <div class="form-row form-inline"> | |
| <div class="col-md-12"> | |
| <div class="form-group m-1"> | |
| <label for="name" class="col-form-label s-12 col-md-4"> | |
| Nama <span class="text-danger"> *</span> | |
| </label> | |
| <input type="text" name="name" id="name" class="form-control r-0 light s-12 col-md-8" autocomplete="off" required /> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="float-right m-1"> | |
| <button type="submit" class="btn btn-primary btn-sm" id="btn-save"> | |
| <i class="icon-save mr-2"></i> | |
| Simpan <span id="form-textAction"></span> | |
| </button> | |
| <input type="reset" value="Reset" class="btn-reset" id="btn-reset" /> | |
| </div> | |
| </div> | |
| </div> | |
| </form> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment