[英]JQuery click slidetoggle only working for the first DIV of PHP repeated DIVS
我有DIV通過PHP重復數據庫中的記錄,我有jquery腳本,點擊后應該展開一個div。
這是幻燈片的簡單代碼,通用的東西:
<script src =
"http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js">
</script>
<script>
$(document).ready(function(){ // Line A
$("#flip").click(function(){ // Line B
$("#panel").slideToggle("slow"); // Line C
});
});
</script>
<body>
<div style="background:red" id="flip">Click to slide the panel down or up</div>
<div style="background:green" id="panel">Oh Hello There</div>
#panel {
display:none;
}
小提琴: http : //jsfiddle.net/hpvgp/3/
但是,當我嘗試將此應用於我的代碼時,我將div循環出來,它只適用於第一個div。
當前代碼:
<?php
$webserver = 'localhost';
$administrator = 'root';
$password = '';
$db_name = 'cdb';
$db = mysqli_connect($webserver, $administrator, $password, $db_name)
or die('Error connecting');
if( isset($_REQUEST['page'])) {
$_SESSION['page'] = $_REQUEST['page'];
}else{
$_SESSION['page'] = 1;
}
$records_per_page = 8;
$query = "SELECT * FROM cars";
$result = mysqli_query($db, $query)
or die("Error in query: '$query'");
$row = mysqli_fetch_assoc($result);
$i = 0;
$start = ($_SESSION['page'] - 1) * $records_per_page;
$end = ($_SESSION['page']) * $records_per_page;
while($row = mysqli_fetch_assoc($result) and $i < $end) {
$i++;
if( $i > $start )
{;
echo'
<div><br><br>
<div id="flip" class="navbar navbar-inverse" style ="margin-top:-40px; height:128px">
<div style="float:left; height:100px; width:200px">
<img src="'.$row['logo'].'" style="margin:10px; float:left" height="100"/></div>
<div style="float:left"><h2>'.$row['make'].' '.$row['model'].'</h2></div>
</div>
</div>
<div><img id="panel" style="padding-bottom: 100px" src="images/cars/'.$row['carIndex'].'.jpg" height="300"/><div> ';
}
}
我目前正在使用Bootstrap,不確定這是否重要。
我發現這對於第一個DIV而不是以下任何一個DIV都很有用。 我是否需要將腳本放在其他地方? 我真的迷失了。
任何幫助表示贊賞-Tom
ID應該是唯一的。 切勿在文檔中多次使用相同的ID。 將您的代碼更改為:
while($row = mysqli_fetch_assoc($result) and $i < $end) {
$i++;
if( $i > $start )
{
echo'
<div><br><br>
<div class="flip navbar navbar-inverse" data-panel="panel_' + $i . '" style ="margin-top:-40px; height:128px">
<div style="float:left; height:100px; width:200px">
<img src="'.$row['logo'].'" style="margin:10px; float:left" height="100"/></div>
<div style="float:left"><h2>'.$row['make'].' '.$row['model'].'</h2></div>
</div>
</div>
<div><img id="panel_' . $i . '" style="padding-bottom: 100px" src="images/cars/'.$row['carIndex'].'.jpg" height="300"/><div> ';
}
}
現在將你的javascript改為:
<script>
$(document).ready(function(){
$(".flip").click(function(){
var panelId = $(this).attr('data-panel');
$('#' + panelId).slideToggle("slow")
});
});
</script>
這樣,您的ID就是唯一的,每個面板都通過包含面板ID的自定義屬性( data-panel
)與其“翻轉”div相關聯。
您正在為多個div分配相同的ID。 根據定義,ID是唯一的。 如果您在多個元素上設置相同的ID,則您的HTML將無效並且所有投注均已關閉。 jQuery將使用GetElementByID()來選擇在向其傳遞ID時要抓取的元素,並且當多個具有相同ID的元素未定義時,GetElementByID的行為。 它理論上可以做任何事情(拋出異常,返回第一個匹配元素,選擇最后一個匹配元素,隨機選擇一個匹配元素,讓惡魔飛出你的鼻子等)。
由於您希望代碼影響多個元素,因此所有這些元素都有一些共同點。 因此它們都屬於同一類元素,您應該使用class =“someclass”來指示哪些元素屬於該類。 HTML喜歡:
<div class="flip navbar navbar-inverse" style ="margin-top:-40px; height:128px">
JS喜歡:
$(".flip").click(function(){ // Line B
作為一個至少對我來說有用的建議,當我使用類來實現綁定函數時,我喜歡將該類與其他類相區別,所以我將前綴“js-”添加到類中。 這樣我就知道它不是一個設計類,一個事件綁定到該類,並且該類不應該被刪除。 所以我會用“js-flip”代替“翻轉”。 但它只是和建議作為良好實踐,有些人不能同意我,但它在多個人觸及相同代碼的項目中非常有用。 此外,我不會為該類添加css樣式,因為它的海豚只是程序化的,所以它對設計師來說是透明的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.