Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
simpmw
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Alfiro Pratama
simpmw
Commits
bd437915
Commit
bd437915
authored
Mar 11, 2026
by
Alfiro Pratama
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
usulan dana numeric full angka
parent
6929b02f
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
63 additions
and
55 deletions
+63
-55
resources/views/backend/mahasiswa/proposal/create.blade.php
+63
-55
No files found.
resources/views/backend/mahasiswa/proposal/create.blade.php
View file @
bd437915
...
...
@@ -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.5
0)</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: 95000
0)</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
">
...
...
@@ -147,7 +147,7 @@
var url = window.URL.createObjectURL(this.files[0]);
$('#pdfViewer').attr('src', url);
});
// Reset iframe saat modal ditutup
$('#pdfModal').on('hidden.bs.modal', function (e) {
$('#pdfViewer').attr('src', '');
...
...
@@ -165,7 +165,7 @@
// Munculkan modal
$('#pdfModal').modal('show');
});
// Reset iframe saat modal ditutup
$('#pdfModal').on('hidden.bs.modal', function (e) {
$('#view-pdf').attr('src', '');
...
...
@@ -177,13 +177,13 @@
$(document).ready(function () {
$('#input-file').on('change', function (e) {
var fileInput = e.target.files[0];
// Periksa apakah ada file yang dipilih
if (!fileInput) {
alert('Silakan pilih file PDF terlebih dahulu.');
return;
}
// Periksa tipe file (harus PDF)
if (fileInput.type !== 'application/pdf') {
alert('File harus berupa PDF.');
...
...
@@ -191,7 +191,7 @@
$('#input-file').val('');
return;
}
// Periksa ukuran file (maksimal 5MB)
if (fileInput.size > 5 * 1024 * 1024) {
alert('Ukuran file maksimal adalah 5MB.');
...
...
@@ -200,23 +200,23 @@
return;
}
});
// Fungsi untuk tombol "
Preview
"
$('#btnPreview').click(function() {
var fileInput = $('#input-file')[0].files[0];
// Periksa apakah ada file yang dipilih
if (!fileInput) {
alert('Silakan pilih file PDF terlebih dahulu.');
return;
}
// Tampilkan pratinjau PDF di dalam modal jika file memenuhi syarat
var url = URL.createObjectURL(fileInput);
$('#view-pdf').attr('src', url);
$('#pdfModal').modal('show');
});
// Reset iframe saat modal ditutup
$('#pdfModal').on('hidden.bs.modal', function (e) {
$('#view-pdf').attr('src', '');
...
...
@@ -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;
}
document.getElementById('invalidInput').style.display = 'none';
return true;
}
function formatRupiah(el) {
var val = el.value.trim();
// Jika input kosong, reset flag 'rpAdded' dan hitungan titik
if (val === '') {
rpAdded = false;
dotCount = 0;
return;
// Izinkan tombol panah
if (charCode >= 37 && charCode <= 40) {
document.getElementById('invalidInput').style.display = 'none';
return true;
}
// 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
// Izinkan hanya angka 0–9
if (charCode >= 48 && charCode <= 57) {
document.getElementById('invalidInput').style.display = 'none';
return true;
}
// Hitung jumlah titik (.) dalam input
dotCount = (val.match(/\./g) || []).length;
// Selain itu dianggap tidak valid
document.getElementById('invalidInput').style.display = 'block';
return false;
}
// 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
} else {
document.getElementById('dotWarning').style.display = 'none'; // Sembunyikan peringatan titik (.) berlebihan
// 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 = val;
el.value = cleaned;
}
// 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;
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 {
invalid.style.display = 'none';
}
});
});
})();
</script>
@endsection
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment