Проблем с инициализация на обект по class в Jquery

ivo75

Registered
Използвам следния код за създаване на дървовидна структура на категории и подкатегории

първо зареждам основните категории ето така:
Код:
<?php require_once('Connections/proekt.php'); 

mysql_select_db($database_proekt, $proekt);
$query_rs_oblekla = "SELECT id, name FROM categories WHERE parent_id = 1";
$rs_oblekla = mysql_query($query_rs_oblekla, $proekt) or die(mysql_error());
$row_rs_oblekla = mysql_fetch_assoc($rs_oblekla);
$totalRows_rs_oblekla = mysql_num_rows($rs_oblekla);
 //$i=0;
if ($rs_oblekla)
{
do {  
//$i=$i+1;
echo "<p class='bb' id=".'p'.$row_rs_oblekla['id']."><i id=".'i'.$row_rs_oblekla['id']." class='icon-folder-close'></i> " .$row_rs_oblekla['name']. "</p><div id=".'d'.$row_rs_oblekla['id']."></div>"; 

}
 while ($row_rs_oblekla = mysql_fetch_assoc($rs_oblekla));
 
 }
else
{
//echo "Проблем!";
}


?>

както се виждам създавам динамично и няколко обекта ката <p>, <div> и <i> като всеки от тях има id, а <p> има и class. След кликване върху <p> чрез jquery взима id на <p> и го предавам към друг файл чрез ajax и се изпълнява друга заявка, която извежда подкатегории на кликната категория (<p>) и ми зарежда тези подкатегории в горе създадения динамичен <div>

ето това е заявката и jquery кода

JQuery
Код:
<script>
   $(document).ready(function () {
  
        $('.bb').hover(function() {
 $(this).css('cursor','pointer');
 
 
 });
 
   
 $('.bb').click(function() {
     var parent_id=$(this).attr("id");
   
     var current_div=parent_id.substr(1);
         
if(jQuery("#i"+current_div).attr('class') != undefined && jQuery("#i"+current_div).hasClass('icon-folder-close')) 
{

       $.ajax({
    		   	type: "POST",
			url: "get_sub_categories.php",
			data: "parent_id=" + current_div,
        		success: function(parent){
                                                     
                            $("#i"+current_div).removeClass("icon-folder-close");
                            $("#i"+current_div).addClass("icon-folder-open"); 
                           $("#d"+current_div).html(parent);
                        
 	          		
 		        },
			error: function(){
				//alert("Писмото не е изпратено!");
				}
      			});
}
                      
                        else
                        {
                        $("#i"+current_div).removeClass("icon-folder-open");
                        $("#i"+current_div).addClass("icon-folder-close"); 
                        $("#d"+current_div).text('');
                                                
                        }
     });
  });
 </script>

Заявката - файла get_sub_categories.php

Код:
<?php require_once('Connections/proekt.php'); ?>

<?php
if(isset ($_POST['parent_id']))
{
$parent_id=$_POST['parent_id'];
mysql_select_db($database_proekt, $proekt);
$query_rs_oblekla = "SELECT id, name FROM categories WHERE parent_id = $parent_id";
$rs_oblekla = mysql_query($query_rs_oblekla, $proekt) or die(mysql_error());
$row_rs_oblekla = mysql_fetch_assoc($rs_oblekla);
$totalRows_rs_oblekla = mysql_num_rows($rs_oblekla);
 
if ($rs_oblekla)
{

do {  

echo "<p class='sub' id=".'p1'.$row_rs_oblekla['id']."><i id=".'i1'.$row_rs_oblekla['id']." class='icon-folder-close'></i> ".$row_rs_oblekla['name']. "</p><div id=".'d1'.$row_rs_oblekla['id']."></div>"; 
}
    while ($row_rs_oblekla = mysql_fetch_assoc($rs_oblekla));
}
else
{
//echo "Проблем!";
}
//style='text-indent: 12px; cursor: pointer;'
}
?>

Toзи код работи, наистина взима подкатегориите и ми ги извежда под основната категории. Както се вижда и от кода на get_sub_categories.php там също създавам динамично обекти <p class="sub">, <div> и <i> като те имат други id-та и после се опитвам да използвам горния начин като кликна върху подкатегориите да ми изведе техните подкатегории, но този път вече кода не работи и точно това се чудя защо. Eто и Jquery кода на подкатегориите

Код:
$('.sub').hover(function() {
 $(this).css('cursor','pointer');
 
 //alert($(this).attr("id"));
 });
 
   
 $('.sub').click(function() {
     var parent_id2=$(this).attr("id");
   alert(parent_id2);
     var current_div2=parent_id2.substr(2);
          
if(jQuery("#i"+current_div2).attr('class') != undefined && jQuery("#i"+current_div2).hasClass('icon-folder-close')) 
{

       $.ajax({
    		   	type: "POST",
			url: "get_sub_categories2.php",
			data: "parent_id=" + current_div2,
        		success: function(parent2){
                            $("#i"+current_div2).removeClass("icon-folder-close");
                            $("#i"+current_div2).addClass("icon-folder-open"); 
                           $("#d"+current_div2).html(parent2);
                        
 	          		},
			error: function(){
				
				}
      			});
}
                      
                        else
                        {
                        $("#i"+current_div2).removeClass("icon-folder-open");
                        $("#i"+current_div2).addClass("icon-folder-close"); 
                        $("#d"+current_div2).text('');
                        //alert($(".sub").attr("id"));
                        
                        }
   
  });
 
      $('#li1').click(function() {
           $(".active").removeClass("active");
        $(this).addClass("active");   
        $('#porachki').load("porachki.php");
     
  });
  $('#na').click(function() {
           $(".active").removeClass("active");
        $(this).addClass("active");       
     
  });

т.е. както се вижда при кликване въру class="sub" трябва да изпълнява някакво действие, но нищо не се случва и си мисля, че не инициализира елемент с такъв class="sub"
 
До колкото разбрах, наистина обекта все още не съществува при document.ready защото още не е създаден, за това използвай jquery.live :idea:
 
jQuery.live не се подържа от >=1.9!!!
jQuery.on се ползва сега...

опитай се да сложиш jquery кода преди </body>!
 
Ако го изкарам извън document.ready като отделна функция и го извика чрез onclick() (не съм сигурен дали това работеше по ИЕ)?
 
IzKuFeLiQqQqQ каза:
jQuery.live не се подържа от >=1.9!!!
jQuery.on се ползва сега...

опитай се да сложиш jquery кода преди </body>!

jquery кода е между <head></head> т.е. преди body e
 
Опитах да пробвам дали го инициализира така
Код:
$(".sub").on('click' , function(){
    alert("test text");
});


но пак не става :(
 
ivo75 каза:
IzKuFeLiQqQqQ каза:
jQuery.live не се подържа от >=1.9!!!
jQuery.on се ползва сега...

опитай се да сложиш jquery кода преди </body>!

jquery кода е между <head></head> т.е. преди body e

По-принцип и аз така знам, но на много места чета, че като се сложи на края така първо, че DOM елементите зареждат по-бързо вместо първо да чакат скриптовете и второ, че когато първо DOM елементите се появят така няма се получи момента когато има скрипт за някой, а елемента го няма....
 

Back
Горе