https://www.youtube.com/watch?v=JeVkrHBPVgg&ab_channel=Divinector
bu videoda gördüğüm kadarı ile strings: [] nesneli dizi kabul etmiyor.
Ama php tarafından dönen değerler yanlış yorumlamadı isem dizi içinde obje olarak dönüyor.
// Php tarafından gelen json
[
{
"icerik": "İçerik 1"
},
{
"icerik": "İçerik 2"
}
]
Olması gereken
// Eklentinin okumak istediği Json
["İçerik 1", "İçerik 2"]
Php tarafını bu şekilde değiştir => $data[] = $gelsin['icerik']
Javascript tarafını da bu şekilde değiştir => strings: response
Network'a bak istek attığın sırada Payload içeriğinde gorsel= anahtarı var mı kontrol et.
Ayrıca $uzanti = explode(".", $_FILES[gorsel][name]); bu kodda tırnakları unutmuşsun.
<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>