php onclick olay sorunu listesi

5 Cevap php

Ben dinamik bir listesini tıklayarak yeni dinamik bir listesini görüntülemek için çalışıyorum. Neden ben onları dinamik liste diyorsunuz? Veri veritabanından olduğu için.

Benim idea şirketlerinden, ben bir şirket tıkladığınızda, şirketteki tüm sitelerin bir listesi görüntülenir listesini oluşturuyor; I bir şirketin bir siteyi tıklatın Ve sonra, sitedeki tüm çalışanların bir listesi görüntülenir.

Şimdi ben bir sorun araya geldi. I şirketler listesinde herhangi bir öğeyi tıklattığınızda, şirket listenin son öğesi sitelerin bir listesini gösterir. I siteler listesinde herhangi bir öğeyi tıklatın zaman, sitelerde son öğenin çalışanlar listesini gösterdi.

Neden biliyor musunuz?

İşte kod ve sonuç görüntü:

<script language="JavaScript">
    function toggle(id,id2,id3) {
        var state = document.getElementById(id).style.display;
            if (state == 'block') {
                document.getElementById(id).style.display = 'none';
                if (id2 != undefined)document.getElementById(id2).style.display = 'none';
                if (id3 != undefined)document.getElementById(id3).style.display = 'none';
            } else {
                document.getElementById(id).style.display = 'block';
            }
        }
</script>
<style type="text/css">
#main{
    position:relative;
    top:20px;
    left:20px;
    width:200px;
    background: lightblue;
}
#hidden {
    position:relative;
    top:5px;
    left:280px;
    width:200px;
    background: lightgrey;
    display: none;
}
#hidden2 {
    position:relative;
    top:-12px;
    left:580px;
    width:200px;
    background: lightgreen;
    display: none;
}
#hidden3 {
    position:relative;
    top:100px;
    left:20px;
    width:200px;
    background: lightpink;
    display: none;
}
</style>
    <?php
        error_reporting(E_ALL ^ E_NOTICE);
        include("./conn/connect.php");
        $query = "SELECT * FROM entreprise ORDER BY id";
        $result = mysql_query($query) or die("result failed: ".mysql_error());
    ?>
<div id="main" >
    <?php
        echo "<ul>";
        while($row = mysql_fetch_assoc($result)){
            echo "<li onclick=\"toggle('hidden','hidden2','hidden3');\">".$row['name'].'<li>';
            $query2 = "SELECT * FROM site WHERE eid = '".$row['id']."'";
            //$query2 = "SELECT * FROM site WHERE eid = ".$row['id'];
            //$result2 = mysql_query($query2) or die("query2 result error".mysql_error());
            $result2 = mysql_query($query2) or die("query2 result error".mysql_error());
        }
        echo "</ul>";
    ?>
</div>
<div id="hidden" >
    <?php
        echo "<ul>";
        while($row2 = mysql_fetch_assoc($result2)){
            echo "<li onclick=\"toggle('hidden2','hidden3')\">".$row2['name'].'< >';
            $query3 = "SELECT * FROM salarie WHERE siteid =".$row2['id'];
            //echo $query3;
            $result3 = mysql_query($query3) or die("query3 result error".mysql_error());
        }
        echo "</ul>";
    ?>
</div>
<div id="hidden2" >
    <?php
        echo "<ul>";
        while($row3 = mysql_fetch_assoc($result3)){
            echo "<li onclick=\"toggle('hidden3')\">".$row3['prenom'].'< >';
            $query4 = "SELECT * FROM salarie WHERE id =".$row3['id'];
            $result4 = mysql_query($query4) or die("query4 result error".mysql_error());
        }
        echo "</ul>";
    ?>
</div>
<div id="hidden3">
    <?php
        echo "<table>";
        while($row4 = mysql_fetch_assoc($result4)){
            echo "<tr><td>".$row4['prenom'].'</td>';
            echo "<td>".$row4['nom'].'</td></tr>';
        }
        echo "</table>";
    ?>
</div>

Sonuç görüntü:

alt text

5 Cevap

Oldukça basit: Eğer sitesine eriştiklerinde PHP kodu ONCE yürütülür.

Bu bloğun Yani, örneğin sonuç

while($row = mysql_fetch_assoc($result)){
        echo "<li onclick=\"toggle('hidden','hidden2','hidden3');\">".$row['name'].'<li>';
        $query2 = "SELECT * FROM site WHERE eid = '".$row['id']."'";
        //$query2 = "SELECT * FROM site WHERE eid = ".$row['id'];
        //$result2 = mysql_query($query2) or die("query2 result error".mysql_error());
        $result2 = mysql_query($query2) or die("query2 result error".mysql_error());
}

$result2 Listenizde son şirketin tüm siteleri tutan olmasıdır. Bu daha sonra sitelerin gelen bir listesini oluşturmak için bir sonraki döngü kullanılır. Oluşturulan HTML dosyasının kaynağına bakmak.

PHP bir sunucu tarafı dil, kod sunucuda çalıştırılır ve (yani tarayıcıda idam değil) senin Javascript işlevleri tarafından yeniden idam değildir.

Eğer sonra dinamik AJAX ile sunucudan veri yükleme ve oluşturulan HTML içine geçmektedir nelerdir.

Edit:

Ayrıca Ajax olmadan bunu yapabilirdi: Bu gibi PHP Rewrite:

$sitequeries = array()
while($row = mysql_fetch_assoc($result)){
        echo "<li onclick=\"showSites('sites_$row['id']');\">".$row['name'].'<li>';
        $query = "SELECT * FROM site WHERE eid = '".$row['id']."'";
        $sitequeries[$row['id']] = mysql_query($query2 or die("query2 result error".mysql_error());
}

ve

<?php
    foreach($sitequeries as $id => $query) {
        echo "<ul class='sites' id='sites_$id'>";

        while($row2 = mysql_fetch_assoc($query)){
            //...
        }
        echo "</ul>";
    }
?>

Bu bir çalışma örneği değil ama size doğru bir fikir vermelidir. Sadece ilgili listeleri, örneğin göstermek için buna göre JS ayarlamak zorunda:

function showSites(id) {
   // Hide all lists with class 'site' here ve only display the list with id 'id' e.g. 'sites_5'
}

Ancak HTML nesil bir zaman alabilir vb şirketler, sitenin, çalışanları, bir sürü varsa, bu iyi bir çözüm olmadığını unutmayın. Sonra Ajax daha iyi bir seçimdir.

Your toggle() Function needs 3 Parameters You set on some places just 2 parameters

echo "<li onclick=\"toggle('hidden2','hidden3')\">".$row2['name'].'< >';

Shoud

echo "<li onclick=\"toggle('hidden1','hidden2','hidden3')\">".$row2['name'].'< >';

Ben kodu hakkında bazı şeyler yapardı:

  1. Geri kalan şeyler edinme verileri bölmek. Başlangıçta, gerekli tablodan veri almak ve PHP değişkenleri tutmak. Sonra, ihtiyaçlarına göre bir JS framework ... şey kullanarak onlarla birlikte bir şeyler yapmak

  2. Yaklaşım ile sorun dolayısıyla, bu tarayıcıda HTML parser tarafından çözümlenen sonuncusu olur, varsayılan olarak seçilen satırın, gelen id gönderir ... satırın ID gönderilmesi gerekmektedir kimseye söylemeden asla olmasıdır. Bu, son bir anlamına gelir ...

PHP kodu hedefe uymuyor. $ Result2 hep böylece $ result1 bulunan son kimliği olacak ve.

Eğer kullanıcı result1 seçtiği ne dayalı result2 oluşturmak gerekiyorsa, o zaman mümkün olan her seçim ardından göstermek veya gizlemek için javascript kullanmak için satırları oluşturmak, ya da Ajax (daha iyi) çağrıları kullanmak ya gerekir.

Ister yerine Eğer şu anda şekilde yapmanın JQuery içine bakmak olabilir. Ama doğru Streetparade olduğunu.