2011-07-27 30 views
1

我已經編寫了一個搜索代碼,通過PHP顯示MySql數據庫中的數據。這是一本書,其中包含描述,價格,主題等內容......其中一些是基本的,需要立即看到(例如標題,價格),其中一些更爲複雜,不需要展示,除非由用戶(例如說明書,評論員等)所要求的。在PHP中使用'echo'時,jquery只能用於頂級SQL搜索結果

我想通過點擊基本文本並使複雜的文本下拉來完成此操作。我選擇了Jquery的'slidetoggle'函數,將基本文本包含在'basic'div中,當點擊它時,會降低第二個'更多'div。

它可以處理最高結果,但不適用於任何進一步的輸出,就好像腳本在第一組div後停止一樣,並且不會爲其他結果工作。

我希望是有道理的,這裏是我的代碼 -

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

$(document).ready(function(){ 
$("#basic").click(function(){ 
     $("#more").slideToggle("slow"); 
    }); 
}); 


</script> 

和回聲 -

echo " 

<div id='basic'> 

<img src='/ctr/$pic'> 
$name - $topic - $format - $mark - $price 



<div id='more' style='display:none;'> 
$description - $gender - $age - $reviewer 
</div> 

</div> 
<hr> 

"; 

我已經採取了大部分的格式化出來,使其更清晰,和我欣賞點擊div可能不是展示更多數據的最佳方式。

我試過把java裏面的「回聲」部分,以及,但這只是意味着最高的結果工作,但沒有其他人。

我想我可能需要某種循環函數,使用num_rows指令進行更改或單獨重命名每個div的方法,即basic1,basic2,basic3,但我確定必須有更簡單的方法去做這個。

任何幫助或指導/其他回答問題的鏈接非常感謝。

回答

1

只有頂端結果的作品,因爲你正在使用的ID作爲選擇,這在jQuery的retruns只有一個結果(ID應該是唯一的),你可以這樣做:

jQuery的

$(document).ready(function(){ 
$(".toggle").click(function(){ 
     $(this).find("#more").slideToggle("slow"); 
    }); 
}); 

PHP :

 echo " 

<div class='toggle'> 

<img src='/ctr/$pic'> 
$name - $topic - $format - $mark - $price 



<div id='more' style='display:none;'> 
$description - $gender - $age - $reviewer 
</div> 

</div> 
<hr> 

"; 

在每次這樣你附加一個事件的一類和你按下該分區,它會尋找一個div機智ID =更在他的後代 - 這適用於任意數量的div的網頁上

看看例子http://jsbin.com/etawav/edit#preview

+0

則不應使用任何ID不止一次在網頁中。 –

+0

是的,我增加了類而不是覆蓋ID(但我寫在答案ID應該是唯一的) –

+0

這兩個答案非常有幫助,現在非常好,非常感謝你,我沒有意識到ID和班級有這樣的非常重要。菜鳥的錯誤,再次感謝。 – toastie

2

我因爲你使用的時候你應該使用一個類爲您的div一個id想象中的第一項這隻作品。 ID只能在頁面上使用一次,而類可以多次使用。試試這個jQuery的:

$(document).ready(function(){ 
$(".basic").click(function(){ 
     // restrict selection to just the children of this (.basic div) 
     $(".more", $(this)).slideToggle("slow"); 
    }); 
}); 

有了這個PHP:

echo " 
    <div class='basic'> 
     <img src='/ctr/$pic'> 
     $name - $topic - $format - $mark - $price 
     <div class='more' style='display:none;'> 
     $description - $gender - $age - $reviewer 
     </div> 
    </div> 
    <hr> 
";