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/
Ben konuyu paylaştığım zamanlarda sorunu php tarafında çözmüştüm yalnız ben kullanıcı id bilgisini bildiğim için giriş yaptıktan sonra direk istek attırıyorum.
Aşağıdaki kodlar oturum açmak için.
$parasut_login = curl_init();
curl_setopt($parasut_login, CURLOPT_URL, "https://uygulama.parasut.com/kullanici-girisi");
curl_setopt($parasut_login, CURLOPT_REFERER, "https://uygulama.parasut.com/kullanici-girisi");
curl_setopt($parasut_login, CURLOPT_USERAGENT, $_SERVER["HTTP_USER_AGENT"]);
curl_setopt($parasut_login, CURLOPT_RETURNTRANSFER, true);
curl_setopt($parasut_login, CURLOPT_COOKIEJAR, "parasut.txt");
curl_setopt($parasut_login, CURLOPT_COOKIEFILE, "parasut.txt");
preg_match_all('<input type="hidden" name="authenticity_token" value="(.*?)">', curl_exec($parasut_login), $authenticity_token);
curl_setopt($parasut_login, CURLOPT_URL, "https://uygulama.parasut.com/kullanici-girisi");
curl_setopt($parasut_login, CURLOPT_REFERER, "https://uygulama.parasut.com/kullanici-girisi");
curl_setopt($parasut_login, CURLOPT_USERAGENT, $_SERVER["HTTP_USER_AGENT"]);
curl_setopt_array($parasut_login, [
CURLOPT_USERAGENT => "https://uygulama.parasut.com/kullanici-girisi",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_USERAGENT => $_SERVER["HTTP_USER_AGENT"],
CURLOPT_POST => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_POSTFIELDS => [
'authenticity_token' => $authenticity_token[1][0],
'user[email]' => '[email protected]',
'user[password]' => '****',
'user[remember_me]' => '0',
'commit' => 'OTURUM AÇ'
],
CURLOPT_COOKIEFILE => 'parasut.txt'
]);
curl_exec($parasut_login);
Aşağıdaki kodlar da satış faturalarını listelemek için...
$kid = 11111;
curl_setopt($parasut_login, CURLOPT_URL, "https://api.parasut.com/v4/$kid/sales_invoices?filter%5Barchived%5D=false&filter%5Brecurring%5D=false&filter%5Bquery%5D=&filter%5Bsharing_status%5D=&filter%5Bpayment_status%5D=&filter%5Bprint_status%5D=&filter%5Bissue_date%5D%5Bgteq%5D=" . date('Y-m-d', strtotime($donem)) . "&filter%5Bissue_date%5D%5Blteq%5D=" . date('Y-m-t', strtotime($donem)) . "&filter%5Bitem_type%5D=invoice%2Crefund%2Cestimate%2Cexport&filter%5Bcategory%5D=&filter%5Btag_ids%5D=&include=category%2Ctags%2Ccontact%2Cactive_e_document%2Cfailed_e_invoice&order_scope=order_by_remaining_desc&page%5Bnumber%5D=1");
curl_setopt_array($parasut_login, [
CURLOPT_USERAGENT => "https://uygulama.parasut.com/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_USERAGENT => $_SERVER["HTTP_USER_AGENT"],
CURLOPT_POST => false,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_MAXREDIRS => 0,
CURLOPT_COOKIEFILE => 'parasut.txt'
]);
$result = json_decode(curl_exec($parasut_login), true);
Bir de çerezler konusunda COOKIEFILE
ve COOKIEJAR
kullanmaya gerek var mı emin değilim?
Ben şimdi interaktif ve defter beyan için oturum açma veri çekme ile ilgili uygulama yapmaya çalışıyorum oturum kapatma aşamasına kadar kullanmıyorum.
Sanırsam curl_close()
kullanıldığı zaman gerek duyuluyor.
@alihan hangi konuda nodejs mi yoksa php mi?
Teşekkür ederim fakat çalışmadı. Ama ben çözümünü buldum. Har değerlerini kontrol ettim postData.mimeType değeri json belirtilmiş.
Ben text belirtmeme rağmen yanlış yöntemle gidiyormuş.
CURLOPT_HTTPHEADER => array("content-type: application/json")
yapınca veriler geldi.
{
"postData": {
"mimeType": "application/json; charset=UTF-8",
"params": [],
"text": "21541265-45ce-4064-b2ab-a98107857398"
}
}
Yalnız başlık bilgilerini dizi olarak alabilmem mümkün mü?
HTTP/1.1 200
Set-Cookie: JSESSIONID=63D6B8E04778547F25B3ABBB20B5E94D; Path=/; HttpOnly
Server-Time: 1658310818544
Token: **************
Content-Type: application/json;charset=UTF-8
Content-Length: 133
Date: Wed, 20 Jul 2022 09:53:38 GMT
@thenerepe teşekkürler. Yalnız !, *3 gibi tetikleyici kullanıldığında önizleme çalışmıyor.
C:\users\KullaniciAdi\Appdata\Roaming\Code\User\snippets\
konumunda html.json
adlı json dosyası yoksa oluşturup aşağıdaki gibi örnekte olduğu gibi değerler girerseniz.
İhtiyacınız olduğunda prefix değerini yazarak tetikleyici kullanarak otomatik kod oluşturabilirsiniz.
"!jquery": {
"prefix": "!jquery-jsdelivr",
"body": [
"<script src=\"https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.min.js\"></script>"
]
}
php için php.json
"php": {
"prefix": "php",
"body": [
"<?php",
"\t$1",
"?>"
],
"description": "php tag"
},
"!php-mysqli-connect": {
"prefix": "!mysqli-connect",
"body": [
"mysqli_connect(\"localhost\", \"user\",\"password\",\"dbName\")"
],
"description": "MySqli Connect Line"
},
"!php-mssql-connect": {
"prefix": "!mssql-connect",
"body": [
"sqlsrv_connect($$serverName, ['Database' => $$database, 'UID' => 'zirvenet', 'PWD' => 'zrvsql', 'CharacterSet' => 'UTF-8']);"
],
"description": "MsSqli Connect Line"
}
javascript için javascript.json
"arrowA": {
"prefix": "arrowA",
"body": [
"() => {",
"\t$1",
"}"
]
},
"ConsoleLog": {
"prefix": "csl",
"body": [
"console.log($1);",
]
}
"&fn=" + "istekadi"
sana kalmış ek bilgi göndermek istersen diye ekledim. Zamanında bu konuda takılmıştım. Belki lazım olur eklemek istedim.
$.post("post.php", $("form").serialize() + "&fn=" + "istekadi", (response)=>{
console.log(res);
},"json") // "xml", "html", "text"