Kodları lütfen aşağıdaki butonları kullanarak renklendirin. Örnek: <php> echo "Selam Dünya"; </php>
Yardım
karakter kaldı

Jquery ile select optionların içine kategori ve alt kategorileri listeletme

Arkadaşlar benim kategoriler adında bir tablom var. Tabloda 3 kısım var

kategori_id - kategori_adi - kategori_ustid şeklinde. ben bu tablodaki kategorilerimi veritabanımdan çekip listeleyebiliyorum normalde. Benim istediğim sahibinden.com daki gibi kategorileri selectlerin içine listelemek ilgili kategoriden birini seçtiğimde yeni bir select option görünür hale gelicek şekilde içine alt kategorilerinin listelenmesi.

aşağıda kod örnkelerim var tamamlanmamış şekilde çünkü bir türlü mantık kuramadım. Php ve js de yeniyim o yüzden çözemedim. Yardımlarınızı bekliyorum arkadaşlar.

<<script language="javascript">
    //bu fonksiyon iki farklı şekilde çağrılabilir.
    // 1- Kullanıcı bir üstteki kategoride değişiklik yapmıştır.
    // 2- Daha üstteki kategorilerden recursion yoluyla gelinmiştir.
    // (İki üstteki kategoriden gelinmesi gibi.)
    function alt_kategori(kategori) {
        var secilenler = "", secilmeyenler = "";
        for(var i=kategori.length-1; i>=0; i--) {
            if(kategori[i].selected)
                secilenler += kategori[i].value + ",";
            else
                secilmeyenler += kategori[i].value + ",";
        }//for

        //hiç biri seçilmedi ise hepsi seçilmiş gibi davran.
        //burada aynı zamanda "hepsi" adında bir seçeneğin seçilmesine
        //bağlı olarak da bu satırı çalıştırabilirdik.
        if(secilenler.length==1)
            secilenler = secilmeyenler;
        if(kategori.title) {
            var kategori_alt = document.getElementById(kategori.title);

            if(!kategori_alt.depo) {
                kategori_alt.depo = new Array();
                for(var i=kategori_alt.length-1; i>=0; i--) {
                    kategori_alt.depo[i] = kategori_alt[i];
                }//for
            }//if -- depo

            //sıfırla
            for(var i=kategori_alt.length-1; i>=0; i--) {
                kategori_alt[i] = null;
            }
            for(var i=0;i<kategori_alt.depo.length; i++) {
                /*
                alert( "i(" + i + ")secilenler: " + secilenler + " || title : " + kategori_alt.depo[i].title + "  " + secilenler.indexOf(kategori_alt.depo[i].title + ","));
                alert (secilenler.indexOf(kategori_alt.depo[i].title + ",")>=0);
                */
                if(secilenler.indexOf(kategori_alt.depo[i].title + ",")>=0) {
                    //kategori_alt[i] = kategori_alt.depo[i];
                    kategori_alt[kategori_alt.length] = kategori_alt.depo[i];
                }
            }//for

            //--**
            if(kategori_alt.title)
            alt_kategori(kategori_alt);
        }//if
    }//alt_kategori
    </script>



<select id="ulke" title="anakategori" onchange="alt_kategori(this)" multiple="multiple" size="10" name="ulke" >
            <option value="emlak">Emlak</option>
            <option value="vasıta">Vasıta</option>
			<option value="alisveris">Alışveriş</option>
            <option value="kariyer">Kariyer</option>
        </select>
		
        <select id="anakategori" title="altozellik" onchange="alt_kategori(this)" multiple="multiple" input="hidden" size="10" name="sehir" >
		
		<?php $sorgula = mysql_query("SELECT * FROM kategoriler WHERE kategori_ustid='2'") or die (mysql_error());
		while($row= mysql_fetch_array($sorgula)){ ?>
            <option title="emlak" value="<?php echo $row['value_adi'] ; ?>"><?php echo $row['kategori_adi'] ; ?></option>
        <?php } ?>
		   
		<?php $sorgula = mysql_query("SELECT * FROM kategoriler WHERE kategori_ustid='3'") or die (mysql_error());
		while($row= mysql_fetch_array($sorgula)){ ?>
            <option title="vasıta" value="<?php echo $row['value_adi'] ; ?>"><?php echo $row['kategori_adi'] ; ?></option>
        <?php } ?>
		
		<?php $sorgula = mysql_query("SELECT * FROM kategoriler WHERE kategori_ustid='24'") or die (mysql_error());
		while($row= mysql_fetch_array($sorgula)){ ?>
            <option title="alisveris" value="<?php echo $row['value_adi'] ; ?>"><?php echo $row['kategori_adi'] ; ?></option>
        <?php } ?>
		
        </select>
        <select id="altozellik" title="a_a_ozellik" onchange="alt_kategori(this)" multiple="multiple" size="10" name="ozellik">
		
		<?php $sorgula = mysql_query("SELECT * FROM kategoriler WHERE kategori_ustid='32' and kategori_ustid='32'") or die (mysql_error());
		while($row= mysql_fetch_array($sorgula)){ ?>
            <option title="cep Telefonu" value="<?php echo $row['value_adi'] ; ?>"><?php echo $row['kategori_adi'] ; ?></option>
        <?php } ?>
		
		<?php $sorgula = mysql_query("SELECT * FROM kategoriler WHERE kategori_ustid='33'") or die (mysql_error());
		while($row= mysql_fetch_array($sorgula)){ ?>
            <option title="bilgisayar" value="<?php echo $row['value_adi'] ; ?>"><?php echo $row['kategori_adi'] ; ?></option>
        <?php } ?>
		
        </select>
		
		
+0
-0
Cevaba KatılıyorumKatılmıyorum
Cevap Yaz Yorum Yaz Arşivime Ekle Takip Et

Doğru Cevap

  • siyahbeyaz adlı üyenin fotoğrafı
    9 yıl önce yazılmış
    9 yıl önce güncellenmiş
    472 cevap - 20 soru
    kardes yaw cok karısık bir islem yapmısın cokta karmasa yaratmışsın for lar bi yandan php kodların bi yandan..
    kolay cozumu var.. birincisi jquery json
    ikincisi jquery live (canli) sistemleri ile bunları yapabilirsin. benim tercihim json yonunde

    sen bi fonskyion yap bi sayfana girdigi kategori_id in altındakileri verecek turden..

    soyle bir mantık cok iyi gelir
    ver.php olsun bu sayfamızın adı.
    <?php
    $sql = query("Select * from Kategoriler where ust='$_POST["Kategori_id"]'");
    $kontrol = mysql_num_rows($sql);
    if($kontrol > 0) {
    $altkatlari = mysql_fetch_array(sql);
    echo json_encode($altkatlari);
    } else {
    $altkatlari = array("Sonuc" => "VeriYok");
    echo json_encode($altkatlari);
    }
    ?>
    


    gelelim diger tarafa.. sayfayı gosterdıgın yer..
    echo '<select name="Kategori_id">';
    $sql = mysql_query("Select * from kategoriler where ust='0'");
    while($yaz = mysql_fetch_array($sql) {
    echo "<option value=\"$yaz["Kategori_id"]\">$yaz["kategori_adi"]</option>
    }
    echo "</select>";
    
    <div id="Altlari"></div>
    


    simdi buraya bide jquery kodlarimizi ekleyelim..
    $("Kategori_id").change(function() {
            $.ajax({
    var Cikti = '<select name="Kategori_id">';
                type:'POST',
                url:'ver.php',
                data: { Kategori_id : $(this).val(); },
                dataType: 'json',
                success:function(ajaxCevap){
                     if(ajaxCevap.Sonuc !="VeriYok") {
                        $.each(ajaxCevap.altkatlari,function(i,kat){
                             Cikti += '<option value="'+kat.Kategori_id+'">'+kat.Kategori_Adi+'</option>';
                        });
                        Cikti +='</select>';
                        $("#Altlari").append(Cikti);
                    } // if kontrol bitisi.
                }
            });
    
    });
    
    • chatlak49 adlı üyenin fotoğrafı chatlak49
      Öncelikle yardımcı olmaya çalıştığınız için teşekkür ederim. Verdiğiniz örnegi tablo isimlerini kendime göre düzenleyip denedim hata vermedi ama sadece tek bir select listenledi içindede kategori_ustid ' si '0' olanları listeledi. Tıkladığım zaman alt kategorileri çıkmıyor.
      9 yıl önce yazılmış
    • siyahbeyaz adlı üyenin fotoğrafı siyahbeyaz
      $("Kategori_id").change(function() {

      satırını

      $("#Kategori_id").change(function() {

      satırı ıle degıstırın... # koymayı unutmusum
      9 yıl önce yazılmış
    • SeyfiCiftci adlı üyenin fotoğrafı SeyfiCiftci
      Biz bunun sınırsız olarak çalışabilenini yaptık ilgilenen arkadaşlar ;
      http://www.uzmansorusu.com/soru/3884/jquery-ile-selectbox-a-sinirsiz-kategorde-ki-verileri-nasil-ekebilirim
      9 yıl önce yazılmış
    • chatlak49 adlı üyenin fotoğrafı chatlak49
      Siyahbeyaz yardımların için teşekkür ederim. Seyfi arkadaşımızın yardımlarıyla sorunu hallettik.
      9 yıl önce yazılmış

Cevaplar

  • SeyfiCiftci adlı üyenin fotoğrafı
    9 yıl önce yazılmış
    7 cevap - 5 soru
    Aynı sorun bende de var arkadaşlar yardımcı olunuz lütfen..
  • chatlak49 adlı üyenin fotoğrafı
    9 yıl önce yazılmış
    3 cevap - 13 soru
    Yardımcı olucak kimse yokmu arkadaşlar ?