我对 Web 开发还很陌生,所以我不确定这是否是完成这项任务的最有效方式。
我目前正在写一个在线商店,在产品页面上,我从数据库后端获取了 x 数量的产品。然后我使用结果数组生成动态 html/css 以输出:
while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) {
echo('
<div class="box">
<div class="product"><img src="upload/' . $row['prod_image'] . '" /></div>
<h3> ' . $row['prod_title'] . '</h3>
<div class="create-user">
<p>More Details...</p>
</div>
<div class="dialog" title="Basic dialog">
<p><img src="upload/class.png"/>This is the default dialog which is useful for displaying information. The dialog window can be moved, resized and closed with the x icon.</p>
</div>
<p class="price">Price: <span class="red">£' . $row['prod_price'] . '</span></p>
<div><a href="#"></a> <a href="#"><img src="images/addtocart.gif" border="0" /></a></div>
<div class="clearfloat"></div>
</div>'
);
}
现在,当您单击“更多详细信息”时,它应该为每个特定产品调用 jQuery 对话框函数以打开“对话框”标签,但这似乎仅适用于第一个产品,不适用于其他产品。
JS代码:
$(function() {
$( "#dialog").dialog({
autoOpen: false
});
$('#create-user').click(function() {
$('#dialog').dialog('open');
});
});
我设法解决了这个问题,但这似乎是一种肮脏的方式,这就是我所做的。我为每个产品添加了一个唯一的 div id,然后使用增量使它们与 JavaScript 保持一致:
$incr = 1;
while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) {
echo('
<div class="box">
<div class="product"><img src="upload/' . $row['prod_image'] . '" /></div>
<h3> ' . $row['prod_title'] . '</h3>
<div id="create-user' . $incr . '">
<p>More Details...</p>
</div>
<p class="price">Price: <span class="red">£' . $row['prod_price'] . '</span></p>
<div><a href="#"></a> <a href="#"><img src="images/addtocart.gif" border="0" /></a></div>
<div id="dialog' . $incr . '" title="Basic dialog">
<p><img src="upload/class.png"/>This is the default dialog which is useful for displaying information. The dialog window can be moved, resized and closed with the x icon.</p>
</div>
<div class="clearfloat"></div>
</div>'
);
$incr++;
}
和 JS 一起去:
$(function() {
var diag_num = 0;
while(diag_num < 4) {
diag_num +=1;
$("#dialog" + diag_num ).dialog({
autoOpen: false
});
$('#create-user' + diag_num).click(function() {
$('#dialog' + diag_num).dialog('open');
});
}
});
虽然这种方法适用于每页一定数量的产品,并且这样做没有问题,因为无论如何我每页只有大约 10 个(所以我知道我的 vars 长度),我不禁认为这是一种不好的做法。
我还研究过使用“div 类”,然后将所有产品分配给同一个类,使用 jQuery 类选择器找到类“create-user”,然后使用“父”方法以爬回DOM 树找到下一个“对话”类。这可行,但是当您打开一个对话框时,它会在页面上为每个产品打开一个对话框,因此我认为“DIVS”是独一无二的。
我希望这是有道理的。