Jquery Unchecked İle Ajax İşlemi
Merhaba.
Düzenleme sayfasına girdiğimde checkbox'u işaretli olmayan sınıfı işaretlediğim zaman o sınıfa atanmış kategori varsa kategoriler listesinde gözüküyor.
Ama tersine bir işlem de uygulamak istiyorum.
Düzenleme sayfasına girdiğim zaman veri tabanından Seçili olan Sınıf ve sınıfa bağlı kategori varsa checkbox işaretli geliyor.
İşaretli olan sınıftan tik işaretini kaldırdığım zaman bir jquery ajax işlemi yapılmasını ve sınıfa bağlı kategorilerin tablodan silinmesini ve kategoriler listesinde gözükmemesini istiyorum.
Bu işlemi nasıl yapabiliriz?
Js Dosyası
// Checkbox işaretlendiği zaman ona atanmış kategori varsa listele
var full_url = window.location.pathname;
var uye_id = full_url.substring(full_url.lastIndexOf('/') + 1);
var url = "http://proje/admin/uyeduzenleajax/"+uye_id;
$(".selectClass").change(function() {
if(this.checked) {
var classList = [];
$.each($(".selectClass:checked"), function(){
classList.push($(this).val());
});
$.ajax({
type: "POST",
url: url,
data: {data:classList},
dataType : 'json',
success: function(view) {
var json = JSON.stringify(view);
var parse = JSON.parse(json);
var result = '';
$.each(parse, function(index, value){
result += '<div class="checkbox category"><label><input type="checkbox" class="mr-2" name="kategori[]" value="'+value.kategori_id+'">'+value.kategori_adi+'</label></div>';
});
$("#categoryList").html(result).fadeIn("fast");
},
error: function(xhr, ajaxOptions, thrownError) {
console.log(xhr.responseText);
}
});
}
});
Php Dosyası
<?php
public function uyeduzenleajax($id){
$sinif_id = $_POST["data"];
$data = [];
foreach ($sinif_id as $sinif){
$data = $this->SinifModel->SinifKategoriler($sinif);
}
echo json_encode($data);
}
?>
Html Dosyası
<?php
$UyeSinif ='';
foreach($uyesiniflar as $uyesinif){
$UyeSinif.= $uyesinif["sinif_id"].",";
}
$UyeSinif = rtrim($UyeSinif,",");
$UyeSinif = explode(",",$UyeSinif);
$UyeKategori ='';
foreach($uyekategoriler as $uyekategori){
$UyeKategori.= $uyekategori["kategori_id"].",";
}
$UyeKategori = rtrim($UyeKategori,",");
$UyeKategori = explode(",",$UyeKategori);
?>
<form role="form" method="post" action="">
<div class="form-group" id="sinif">
<label>Sınıflar</label>
<?php foreach ($siniflar as $sinif): ?>
<div class="checkbox class">
<label>
<input type="checkbox" class="selectClass" name="sinif[]" value="<?php echo $sinif["sinif_id"]; ?>" <?php echo in_array($sinif["sinif_id"],$UyeSinif) ? "checked" : ""; ?> ><?php echo $sinif["sinif_adi"]; ?>
</label>
</div>
<?php endforeach; ?>
</div>
<div class="form-group" id="kategori">
<label>Kategoriler</label>
<?php foreach ($kategoriler as $kategori): ?>
<div class="checkbox category">
<label>
<input type="checkbox" class="mr-2" name="kategori[]" value="<?php echo $kategori["kategori_id"]; ?>" <?php echo in_array($kategori["kategori_id"],$UyeKategori) ? "checked" : ""; ?> ><?php echo $kategori["kategori_adi"]; ?>
</label>
</div>
<?php endforeach; ?>
<div id="categoryList"></div>
</div>
<button type="submit" class="btn btn-default">Güncelle</button>
</form>
Öncelikle kodun çok karışık, refaktör etmeni tavsiye ederim. Fakat bu kod ile devam edeceksen aşağıdakine yakın bir yöntem deneyebilirsin.
result += '<div class="checkbox category"><label><input type="checkbox" class="mr-2" name="kategori[]" value="'+value.kategori_id+'">'+value.kategori_adi+'</label></div>';
Yukarıdaki satırdaki en dıştaki dive, ilgili kategorinin sınıfının adını ekle. (tabi gelen kategori verisinde 'kategori_id' ve 'kategori_adi' sütunlarının yanında bir de 'sinif_adi' şeklinde bir sütun bulunmalı)
result += '<div class="checkbox category '+value.sinif_adi+'"><label><input type="checkbox" class="mr-2" name="kategori[]" value="'+value.kategori_id+'">'+value.kategori_adi+'</label></div>';
Yukarıdaki gibi yaptıktan sonra.
if(this.checked) {
//..
//.. AJAX kodların
//..
}else {
$("#categoryList div."+this.value).remove();
}
Else bloğu yardımıyla uncheck
olan sınıfa ait kategorileri silebilirsin.