none
JQuery Ajax id alma sorunu RRS feed

  • Soru

  • Merhaba arkadaslar sorunumu kisaca özetliyim. Veritabanindan verileri repeater veya listview tarzi kontrollerle cekmek yerine JQuery Ajax kullanarak cekip bir ul'nin icine gelen li'leri yüklüyorum. Orada problem yok verileri alip ekrana basiyor. 

    Sorunum ise bunun yanında verileri 3 saniye aralıklarla yeniliyorum en son li girdisinin id değerini alip kontrol ettiriyorum eger büyük deger varsa devamına ekletiyorum. Sorunum ise her ikisinide document ready kısmında cekiyorum functionlarimi ama bir türlü en son li girdisinin değerini alamiyorum "undefined" hatası ile karşılaşıyorum oysaki ilk metod'um ul'nin içine listleri basıyorum. Ama onları basmak yerine repeater kullanarak çekersem ozaman sorun yok son id değerini aliyor. Ama functionla çekersem alamıyor değeri. Kısaca bu ilk functionumu document ready kısmı yerine farklı bi olaydamı çekmeliyim? window load dada calismadi. 

    Standart çekme kodlarım.

    $("#icerikler li:last").attr("id")

    <ul id="icerikler">

    <li id="1"></li>

    <li id="2"></li>

    <ul>

    13 Aralık 2012 Perşembe 12:14

Yanıtlar

  • ya anladıgım kadarıyla en sonrakinin id alcan demi li yide $.each(gelen,function(i,item){

    ff="<li id=" + i +"> item.ad<li>";

    });

    la doldurdugunu var sayarsak

    senınde sadece sunu eklemen yeterli

    <li id=" + i +" class="c"> item.ad<li>

    sonra document readyde

            

     $(document).ready(function () {
            var uzun = $(".c").length;

    bunu intervaliin icine at orda ıstegını yap 

        });

    yazarsan sonrakinin id degerini alırsın hadata hatta biraz eventlarla da son degere gelınce farklı oalyları yapabılırsın yanls anladıysam duzenltin

    14 Aralık 2012 Cuma 12:46

Tüm Yanıtlar

  • $("#icerikler li:last-child")

    www.gorkemozdogan.com

    13 Aralık 2012 Perşembe 13:24
  • document ready methodu dom elementlerinin tamamı yüklendikten sonra çalışıyor. hal böyleyken kontrolü seçme kısmında sorun var gibi duruyor. tüm scripti yazabilirseniz buraya daha net anlaşılabilir problem . 

    www.gorkemozdogan.com

    13 Aralık 2012 Perşembe 13:30
  • $("#icerikler li:last-child")

    bunlar çözümüm değil.

    evet elemantler yüklendikten sonra calisiyor o yüzden yenileme metodumu orada çağırıyorum. fakat yinede tanımlayamıyor. şuanda evde değilim ama extra bi method yok. standart sadece id alma meselesi.

    repeater veya listview ile cekersem ilk load verilerini ozaman sorun yok li'lerin idlerini cekebiliyorum. ama gel gelelim kaldirirsam repeateri ortadan ajax ile cekersem verileri ki verileride getiriyor ekrana basıyor ama bu seferde diger metot li'leri bulamiyor.

    13 Aralık 2012 Perşembe 14:02
  • peki bu elementlerin render edilmiş hallerine baktınız mı ? ul ye doldurduğunuz yerde acaba li elementlerine id atanıyor mu ? <li id="n"> <li id="n+1> gibi bir yapı oluşuyor mu sonradan eklenenler li elementleri için? bu ajax ile doldurduğunuz yerde birşey mi gözden kaçırıyorsunuz acaba. kodları görmeden birşey söylemek zor açıkcası sadece tahmin yapabiliyorum. sayfa kaynağından li kısımlarına bakın , id'ler nasıl atanmış. eğer orda bir sıkıntı yok ise. jquery methodunuza geliyor mu kod ona bakın. eğer methoda giriyorsa geriye jquery 'de item seçmede sıkıntı vardır diye düşünmek kalıyor.

    Bu koşullarda aklıma gelenler bunlar. iyi çalışmalar.


    www.gorkemozdogan.com

    13 Aralık 2012 Perşembe 15:01
  • Malesef her türlü kontrol ettim render olurkende... html kodum sadece

    <ul id="icerikler">

    </ul>

    bundan ibaret asıl içini dolduran functionum çalıştığında ise li iler içlerine doluyor ekranada basıyor dediğiniz gibi id lerinide dahi aliyor. hiç bi sıkıntı yok. Daha sonrada otomatik setInterval ile zamanladigim yenileme functionum devreye giriyor onuda son elementin id sini aliyorum

    $("#icerikler li:last").attr("id") veya $("#icerikler li:last-child") tarzında her türlü denedim. Zaten hata olsa selectorumde ilk functionumda appent yaparken yapamazdi. 

    Çözemeyince ilk functionumla ul leri doldurmak yerine repeater koydum mecburen... page loadda doldurdum code-behind tarafından. yine ayni sekilde ul li icleri ekrana basiliyor ve bu sefer yenileme functionum calisiyor son li elemeentini bulabiliyor... Buda aklima document readydeki olaylardan kaynaklanabilecegini getirdi aklima sanirim ilk oradan cekerken yokmus gibimi görüyor yenileme functinum cözemedim. Olmassa mecburen ekrana ilk basarken repeater koyacagim... Cok sacma bi sorun.

    13 Aralık 2012 Perşembe 15:36
  • gözden kaçan birşey vardır muhakkak. bu gibi durumlarda hep bir yer atlanıyordur. 

    -kodunuzu debug ediyormusunuz. jquery tarafında sadece on li elementinin id si mi undefined. diğer elementlerinkileri okuyabiliyormu selector. 

    -ul ye manual olarak doldururken id değerleri doğru atanıyor mu?

    -bahsettiğiz hatayı alırken methodun içine geliyormu kodunuz? undefined dediğine göre geliyor gibi görünüyor.

    document.ready olaylar derken neyi kastettiğinizi anlamadım. jquerynin sayfanın tüm elementleri yüklemeden önce çalışmamasını sağlıyor. eğer orda bir sıkıntı var diyorsanız. javascript kodunuzu body taglerinin dışına alın. zaten javascript kodlarının <body/> den sonra kullanılması önerilir.

    hala daha çözülemiyor ise daha fazla kod paylaşmanız lazım fikir oluşturabilmem için. 



    www.gorkemozdogan.com

    13 Aralık 2012 Perşembe 16:01
  • gözden kaçan birşey vardır muhakkak. bu gibi durumlarda hep bir yer atlanıyordur. 

    -kodunuzu debug ediyormusunuz. jquery tarafında sadece on li elementinin id si mi undefined. diğer elementlerinkileri okuyabiliyormu selector. 

    -ul ye manual olarak doldururken id değerleri doğru atanıyor mu?

    -bahsettiğiz hatayı alırken methodun içine geliyormu kodunuz? undefined dediğine göre geliyor gibi görünüyor.

    document.ready olaylar derken neyi kastettiğinizi anlamadım. jquerynin sayfanın tüm elementleri yüklemeden önce çalışmamasını sağlıyor. eğer orda bir sıkıntı var diyorsanız. javascript kodunuzu body taglerinin dışına alın. zaten javascript kodlarının <body/> den sonra kullanılması önerilir.

    hala daha çözülemiyor ise daha fazla kod paylaşmanız lazım fikir oluşturabilmem için. 



    www.gorkemozdogan.com

    Dediğiniz gibi inceledim gece uzun bi süre hatta sifir bi projedede test ettim. Tekrar yazdim kodları. Her türlü debug'da Developer tools'larlada render halindede inceledim.

    Diger elementleride okuyamiyor tek id değil. Eğer veriyi çekerken önce repeater ile basarsam ekrana aynı AJAX kodlarim ile ID değerlerini okuyabiliyor. Kapatırsam repeateri verileride JQUery ile ekrana bastirirsam bu sefer ne isse ayni kod okuyamiyor ID degerini elementler yokmus gibi davraniyor. Cok garip bi sorun. o yüzden ilk page load olurken verileri JQUery AJaxla cekmek yerine repeater ile cekiyorum. Diger tüm islemleri JQUery ajax ile yapiyorum caresiz.

    14 Aralık 2012 Cuma 09:04
  • Başta Deniz bey olmak uzere tüm ilgi gösterenlere teşekkürler benim de benzer bir sorunum vardı.. HErkese teşekkürler

    14 Aralık 2012 Cuma 12:06
  • ya anladıgım kadarıyla en sonrakinin id alcan demi li yide $.each(gelen,function(i,item){

    ff="<li id=" + i +"> item.ad<li>";

    });

    la doldurdugunu var sayarsak

    senınde sadece sunu eklemen yeterli

    <li id=" + i +" class="c"> item.ad<li>

    sonra document readyde

            

     $(document).ready(function () {
            var uzun = $(".c").length;

    bunu intervaliin icine at orda ıstegını yap 

        });

    yazarsan sonrakinin id degerini alırsın hadata hatta biraz eventlarla da son degere gelınce farklı oalyları yapabılırsın yanls anladıysam duzenltin

    14 Aralık 2012 Cuma 12:46
  • Sayın Bahar,

    Eğer Asp.Net Platformunda Çalışıyorsanız Aşağıdaki Örnek Size Yardımcı Olacaktır. HTML platformunda Jquery Dom Object ile Asp.net Katmanındaki Object Seçimleri Farklılık Göstermektedir.

    Faydalı Olması Dileğimle

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head id="Head1" runat="server">
        <title>Untitled Page</title>


        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>


        <script type="text/javascript">


            $(function()
            {
                $("#<%= btnSubmit.ClientID %>").click(function()
                {
                    alert($("#<%= txtName.ClientID %>").val());
                    var isPostbackRequired = false;
                   

                    return isPostbackRequired
                   

                });
            });


        </script>


    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:TextBox ID="txtName" CssClass="txtName" runat="server" TabIndex="1" MaxLength="40"></asp:TextBox>
            <asp:ImageButton ID="btnSubmit" CssClass="btnSubmit" runat="server" ImageUrl="~/images/btnSubmit.jpg"
                AlternateText="Submit" TabIndex="14" OnClick="btn_submit_Click" />
        </div>
        </form>
    </body>
    </html>


    Sancak


    18 Aralık 2012 Salı 22:02