<input type="text" onkeyup="fn(this)" id="input">
<script>
// etiket içinde onkeyup kullanırsan
function fn(e) {
if(e.value.length == 13) {
// İşlem
}
}
// Veya js ile tetikleyici atayabilirsin. Eğer jquery kullanıyorsan ikincisini de tercih edebilirsin.
document.querySelector("#input").addEventListener("keyup",(e)=>{
if(e.target.value.length == 13) {
// İşlem
}
})
// Jquery
$("#input").on("keyup", (e)=>{
if(e.target.value.length == 13) {
// İşlem
}
})
</script>
Bu sorguyu phpmyadmin ile çalıştırıp kontrol etmeni öneririm hatanı gördüğün zaman daha verimli olur bence.
SUM, COUNT
ile diğer sütunları kullandığın zaman GROUP BY
sonrasına SUM, COUNT
dışındaki diğer sütunları da eklemen gerekir.
JOIN
kullanıyorsan birleştirdiğin ikinci tablonun da sütunlarını eklemelisin.
SELECT SUM(stok_miktar) as stok_miktar,
stok_urun,
stok_nerede,
urunler.urun_ad,
urunler.urun_renk FROM stok
JOIN urunler ON urunler.urun_id=stok.stok_urun
GROUP BY stok_urun, stok_nerede, urunler.urun_ad, urunler.urun_renk
Resimdeki değerleri ele alarak yorumlarsak.
Karşılaştırmalar sırasıyla
durum, başlangıç, bitiş
Yanlış, Doğru, Yanlış
Doğru, Doğru, Yanlış
Doğru, Doğru, Yanlış
Doğru, Doğru, Yanlış
Doğru, Doğru, Yanlış
And kullandığın için hepsinin doğru olması gerekiyor.
jquery click()
methodu çalıştığı anda sayfada bulunan etiketlere tetikleyici atar.
Sonradan eklenenler etkilenmez click()
methodunun tekrar çalışması lazım.
Yalnız sadece son eklenen etiketin seçilip çalışması lazım.
Senin örneğini ele alalım, her yeni eklenen etiketten sonra click()
methodu tekrar çalışırsa eski etiketlere de ek tetikleyici
atanır.
Ve ne kadar kullanırsan o kadar artar.
Her tıkladığında kaç tane yeni etiket oluştu ise o kadar da fonksiyon çalışır.
Ya da @sefaaydin adlı arkadaşımızın önerisi gibi kullanman gerekiyor. Yine de ben iki tane örnek bırakıyorum. Belki ilerde lazım olur.
<button onclick="ekle(2)">Ekle</button>
<table id="table1">
<thead>
<tr>
<th>Programlama Dilleri</th>
<th>Sil</th>
</tr>
</thead>
<tbody>
<tr>
<td>Javascript</td>
<td><button type="button" onclick="sil(1)" data-id="1" class="delete">Sil</button></td>
</tr>
</tbody>
</table>
function ekle(id) {
// Jquery az kod çok iş mantığı ile iç içe kullanacağın etiketleri sadece açmak yetiyor. Kapatmana gerek yok bilgin olsun.
let tr = `<tr>`
tr += `<td>Php`
tr += `<td><button onclick="sil(${id})" data-id="${id}" type="button" class="delete">Sil`
$("#table1 > tbody").append(tr) // Satır eklenir
.find("tr") // Satırlar bulunur
.last() // son satır seçilir
.find(".delete") // son satırdaki .delete sınıfına sahip etiket bulunur
.on("click", (e)=>{ // tetikleyici ve fonksiyonu eklenir
console.log(e.target.dataset["id"])
console.log($(e.target).data("id")) // jquery kullanmak istersen
})
}
Diğer bir seçenek de etiket içinde eklemek.
function ekle(id) {
let tr = `<tr>`
tr += `<td>Php`
tr += `<td><button onclick="sil(${id})" data-id="${id}" type="button" class="delete">Sil`
$("#table1 > tbody").append(tr)
}
function sil(id) {
console.log(id)
}
Php'nin döndürmüş olduğu json çıktısı string olur. Değerlere ulaşman zor.
O yüzden gelen veriyi let newResp = JSON.parse(resp)
kullanıp değerlere ulaşacaksın.
Ya da dataType: "json"
eklemen gerekecek. Bu da seni yukarıdaki kodu yazmandan kurtarıyor.
dataType: "json"
olursa;
$.ajax({
dataType: "json",
success function(jsResp) {
// {"sonuc":"#30 numarali yasaklama veritabanina kaydedildi."} gelen sonuca göre
console.log(jsResp.sonuc) // veya
$("div.alert.alert-success").html(jsResp.sonuc) // bootstrapp uyarılarına yansımasını istiyorsan.
}
})
dataType: "json"
olmazsa;
$.ajax({
success function(resp) {
// {"sonuc":"#30 numarali yasaklama veritabanina kaydedildi."} gelen sonuca göre
let jsResp = JSON.parse(resp)
console.log(jsResp.sonuc) // veya
$("div.alert.alert-success").html(resp.sonuc) // bootstrapp uyarılarına yansımasını istiyorsan.
}
})
Sen nasıl kullanmak istiyorsun?
5 tane seçildiği zaman diğerlerini gizletebilirsin.
Veya gizlemek yerine label
etiketlerini style="pointer-events:none"
yapabilirsin.
$("#wrapper > div").on("change", ()=>{
$label = $("#wrapper > div > label")
$inpChecked = $("#wrapper > div > label > input[type=checkbox]:checked")
if($inpChecked.length == 5) {
$label.find("input[type=checkbox]").each((i,ch)=>{
if($(ch).prop("checked") === false) {
$(ch).parent().hide(); // seçenek 1
$(ch).parent().css("pointer-events","none") // seçenek 2
}
})
} else {
$label.show() // seçenek 1
$label.css("pointer-events","") // seçenek 2
}
})
Neyse daha az kod ile bir şekilde çözdüğümü düşünüyorum. Yine de önerilere açığım.
let data = [
{gmKod: "600.18", tutar:1000, tip:"A"},
{gmKod: "391.18", tutar:180, tip:"A"},
{gmKod: "600.18", tutar:500, tip:"A"},
{gmKod: "391.18", tutar:90, tip:"A"},
{gmKod: "600.08", tutar:500, tip:"A"},
{gmKod: "391.08", tutar:40, tip:"A"},
{gmKod: "100", tutar:1310, tip:"B"},
{gmKod: "108", tutar:1000, tip:"B"}
]
let dataSum = []
data.forEach((arr)=>{
if(dataSum.length != 0) {
$findIndex = dataSum.findIndex(r=> (r.gmKod == arr.gmKod && r.tip == arr.tip))
if($findIndex == -1) {
dataSum.push(arr)
} else {
dataSum[$findIndex].tutar += arr.tutar
}
} else {
dataSum.push(arr)
}
return arr
})
console.log(dataSum)
/* ÇIKTI */
[
{ gmKod: '600.18', tutar: 1500, tip: 'A' },
{ gmKod: '391.18', tutar: 270, tip: 'A' },
{ gmKod: '600.08', tutar: 500, tip: 'A' },
{ gmKod: '391.08', tutar: 40, tip: 'A' },
{ gmKod: '100', tutar: 1310, tip: 'B' },
{ gmKod: '108', tutar: 1000, tip: 'B' }
]
Sorunu çözdüm keydown kullanmak gerekiyormuş...
<input type="text" placeholder="keyDown" onkeydown="keyDown(event)" value="keyDown">
<input type="text" placeholder="keyPress" onkeypress="keyPress(event)" value="keyPress">
<input type="text" placeholder="keyUp" onkeyup="keyUp(event)" value="keyUp">
<script>
function keyDown(event){
if(event.keyCode == 38 || event.keyCode == 40) {
event.preventDefault()
console.log(event)
}
}
function keyPress(event){
console.log(event)
if (event.keyCode == 38 || event.keyCode == 40) {
event.preventDefault()
}
}
function keyUp(event){
if (event.keyCode == 38 || event.keyCode == 40) {
event.preventDefault()
}
}
</script>
Yukarıdaki çıtkı senin verilere ulaşmanı pek sağlamaz. 4 satırdan hangisi sertifika adı hangisi tutar tespit etmen zor.
Birinci örneğimde satır ekletip indis verdirirsen ["name"=>"Sertifika 1", "amount"=>"500.5"]
gibi anahtar=>değer
şeklinde bir nesne oluşur.
foreach($_POST[sf] as $val)
{$val["name"]."-".$val["amount"]}
kullanarak değerlere ulaşabilirsin.
Birinci yöntem aslında güzel kötü tarafı indis verdirmek, belki özel bir kullanımı vardır ama ben bilmiyorum.
Şimdilik js.Jquery yardımı ile yeni satır ekletirken indis ekletilebilir.
İkinci yöntem indis vermek istemezsen yapabileceğin bir yöntem.
Birinci Yöntem
<form action="test.php" method="post">
<div class="row">
<input type="text" name="sf[0][name]" value="Sertifika 1">
<input type="number" name="sf[0][amount]" value="300">
</div>
<div class="row">
<input type="text" name="sf[1][name]" value="Sertifika 2">
<input type="number" name="sf[1][amount]" value="400.50">
</div>
<input type="submit" value="Kaydet">
</form>
<script>
$("#plus").on("click", ()=>{
let indis = $("#sertifikalar").find(".row").length
let insertRow = `<div class="row"><input type="text" name="sf[${indis}][name]" value="Sertifika 1">`
insertRow += `<input type="number" name="sf[${indis}][amount]" value="1000.50"></div>`
$("#sertifikalar").append(insertRow)
})
</script>
Array
(
[sf] => Array
(
[0] => Array
(
[name] => Sertifika 1
[amount] => 300
)
[1] => Array
(
[name] => Sertifika 2
[amount] => 400.50
)
)
)
Bu çıktı pek hoşuma gitmedi. foreach($_POST[sf][name] as $key=>$val)
ile $key yardımı ile $_POST[sf][name][$key]."-".$_POST[sf][amount][$key]
kullanarak bilgilere ulaşabilirsin.
İkinci Yöntem
<form action="test.php" method="post">
<div>
<input type="text" name="sf[name][]" value="Sertifika 1">
<input type="number" name="sf[amount][]" value="300">
</div>
<div>
<input type="text" name="sf[name][]" value="Sertifika 2">
<input type="number" name="sf[amount][]" value="400.50">
</div>
<input type="submit" value="Kaydet">
</form>
Array
(
[sf] => Array
(
[name] => Array
(
[0] => Sertifika 1
[1] => Sertifika 2
)
[amount] => Array
(
[0] => 300
[1] => 400.50
)
)
)
Doğru diyorsun paylaşmam gerekirdi.
Yalnız muhasebe bürosunda çalıştığım için hem sorunu çözmek hem muhasebe işleri ile uğraşmak epey vaktimi almıştı.
O zamanlar aklımdan uçup gitmiş. :)
Oturum açtıktan sonra pro hesabın sayfası https://uygulama.parasut.com/id/