Commit bd437915 by Alfiro Pratama

usulan dana numeric full angka

parent 6929b02f
......@@ -88,10 +88,10 @@
<div class="col-sm-10 col-lg-10">
<div class="input-group">
<span class="input-group-text">Rp</span>
<input class="form-control" type="text" id="usulan_dana" name="usulan_dana" value="{{ old('usulan_dana') }}" placeholder="Dana yang ingin diajukan (cth: 950000 atau 950000.50 | tanda (.) hanya untuk nominal desimal)" required onkeypress="return isNumberKey(event)" onkeyup="formatRupiah(this)">
<input class="form-control" type="text" id="usulan_dana" name="usulan_dana" value="{{ old('usulan_dana') }}" placeholder="Dana yang ingin diajukan (cth: 950000)" required onkeypress="return isNumberKey(event)" onkeyup="formatRupiah(this)">
</div>
<small id="invalidInput" class="text-danger" style="display: none;">Harap masukkan angka atau desimal (contoh: 950000 atau 950000.50)</small>
<small id="dotWarning" style="display: none; color: red;">Simbol titik (.) tidak boleh diinputkan lebih dari 1</small>
<small id="invalidInput" class="text-danger" style="display: none;">Harap masukkan angka (contoh: 950000)</small>
{{-- <small id="dotWarning" style="display: none; color: red;">Simbol titik (.) tidak boleh diinputkan lebih dari 1</small> --}}
</div>
</div>
<div class="mb-0 d-flex justify-content-end">
......@@ -224,60 +224,68 @@
});
</script>
<script>
var rpAdded = false; // Flag untuk menandai apakah 'Rp' sudah ditambahkan
var dotCount = 0; // Menghitung jumlah titik (.) yang sudah dimasukkan
// Hanya izinkan input angka untuk usulan_dana.
// Jika ada karakter non-angka (huruf, simbol, spasi, koma, titik, dll),
// maka akan muncul pesan error #invalidInput dan karakter tersebut dibersihkan.
// Dipanggil dari atribut onkeypress untuk memblokir sebagian besar input non-angka.
function isNumberKey(evt) {
var charCode = (evt.which) ? evt.which : event.keyCode;
var e = evt || window.event;
var charCode = e.which ? e.which : e.keyCode;
// Cek apakah karakter yang dimasukkan adalah angka atau titik (.) dan batasi jumlah titik menjadi 1
if (charCode != 46 && charCode > 31 && (charCode < 48 || charCode > 57)) {
document.getElementById('invalidInput').style.display = 'block';
document.getElementById('dotWarning').style.display = 'none'; // Sembunyikan peringatan titik (.) berlebihan
return false;
// Izinkan tombol kontrol: backspace, tab, enter, esc
if (charCode === 8 || charCode === 9 || charCode === 13 || charCode === 27) {
document.getElementById('invalidInput').style.display = 'none';
return true;
}
// Izinkan tombol panah
if (charCode >= 37 && charCode <= 40) {
document.getElementById('invalidInput').style.display = 'none';
return true;
}
function formatRupiah(el) {
var val = el.value.trim();
// Izinkan hanya angka 0–9
if (charCode >= 48 && charCode <= 57) {
document.getElementById('invalidInput').style.display = 'none';
return true;
}
// Jika input kosong, reset flag 'rpAdded' dan hitungan titik
if (val === '') {
rpAdded = false;
dotCount = 0;
return;
// Selain itu dianggap tidak valid
document.getElementById('invalidInput').style.display = 'block';
return false;
}
// Tambahkan 'Rp0.' jika input diawali dengan titik (.) dan 'Rp' belum ditambahkan sebelumnya
if (val.startsWith('.') && !rpAdded) {
val = '0.';
rpAdded = true; // Set flag 'rpAdded' menjadi true
dotCount = 1; // Tambahkan satu titik
} else if (!rpAdded) {
// Tambahkan 'Rp' jika 'Rp' belum ditambahkan sebelumnya
val;
rpAdded = true; // Set flag 'rpAdded' menjadi true
// Dipanggil dari onkeyup dan juga di-binding pada event input
// untuk membersihkan semua karakter non-angka (termasuk hasil paste).
function formatRupiah(el) {
if (!el) return;
var cleaned = (el.value || '').replace(/\D+/g, ''); // hapus semua non-digit
if (cleaned !== el.value) {
document.getElementById('invalidInput').style.display = 'block';
}
el.value = cleaned;
}
// Hitung jumlah titik (.) dalam input
dotCount = (val.match(/\./g) || []).length;
// Pastikan validasi juga berjalan saat user melakukan paste atau input lainnya.
(function () {
document.addEventListener('DOMContentLoaded', function () {
var field = document.getElementById('usulan_dana');
var invalid = document.getElementById('invalidInput');
if (!field || !invalid) return;
// Tampilkan peringatan jika terdapat lebih dari satu titik (.) dan sembunyikan peringatan input tidak valid
if (dotCount > 1) {
document.getElementById('dotWarning').style.display = 'block';
document.getElementById('invalidInput').style.display = 'none'; // Sembunyikan peringatan input tidak valid
var secondDotIndex = val.indexOf('.', val.indexOf('.') + 1);
val = val.slice(0, secondDotIndex) + val.slice(secondDotIndex + 1); // Hapus titik (.) yang berlebihan dari input
dotCount = 1; // Set jumlah titik kembali menjadi 1
field.addEventListener('input', function () {
var before = field.value;
var cleaned = before.replace(/\D+/g, '');
field.value = cleaned;
if (before !== cleaned) {
invalid.style.display = 'block';
} else {
document.getElementById('dotWarning').style.display = 'none'; // Sembunyikan peringatan titik (.) berlebihan
}
el.value = val;
invalid.style.display = 'none';
}
});
});
})();
</script>
@endsection
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment