【发布时间】:2017-03-10 17:47:14
【问题描述】:
对 JavaScript、jquery 和 ajax 来说非常陌生,并且在使用一组非常基本的脚本来在按钮单击时从数据库加载更多数据时遇到困难。
我第一次单击加载更多时,它可以工作。但是第二次点击没有传递值并且什么都不做。
这是加载一次数据并包含 jquery、ajax 内容的主脚本。
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$("#btn1, #btn2").click(function() {
pagenum = $(this).val();
val = "Loading page " + pagenum + "...";
$(this).text(val);
$.ajax({
type: "POST",
url: "loadmore.php",
data: {page: pagenum},
success: function(response){
if(response){
$("#btn1").hide();
$("#div1").append(response);
}
}
});
});
});
</script>
</head>
<?php
// main.php contains db connection
include('main.php');
$rowsperpage = 2;
$q = "SELECT col1, col2 from mytableORDER BY col1 LIMIT $rowsperpage OFFSET 0";
$r = pg_exec($dbconnect, $q);
echo "<div id='div1' style='margin:10px;'>";
while ($row = pg_fetch_row($r) ) {
echo "<div>$row[1]</div>";
}
echo "<button id='btn1' value=2>Load More</button>";
echo "</div>";
?>
这是获取更多数据以显示的脚本。
<?php
include('../config.php');
include('functions.php');
$rowsperpage = 2;
if(isset($_POST['page'])) {
$paged=$_POST['page'];
} else {
$paged = 1;
}
if($paged > 1) {
$rowoffset = $rowsperpage * ($paged -1);
$limit = " LIMIT $rowsperpage OFFSET $rowoffset";
} else {
$limit = " LIMIT $rowsperpage OFFSET 0 ";
}
$q = "select subindustryid, subindustry from sub_industries ORDER BY subindustry $limit";
$r = pg_exec($dbconnect, $q);
while ($row = pg_fetch_row($r) ) {
echo "<div>$row[1]</div>";
}
$nextpage = $paged + 1;
echo "<button id='btn1' value=$nextpage>Load even more </button>";
?>
问题是显示第二个按钮,点击它时没有任何反应。
感谢您的宝贵时间!
【问题讨论】:
-
代码中没有带有
id="btn2"的按钮,我猜这可能是一个问题。或者如果你想点击id="btn1"并且它是动态添加的,你需要用这个$(document).on("click", "#btn1, #btn2", function() {替换这个$("#btn1, #btn2").click(function() {,因为它是在生成DOM之后添加的 -
$("#btn1, #btn2").click(function() {将其更改为$(document).on('click',"#btn1, #btn2",function() {并检查 id = "btn2" 是否丢失 -
如果有问题,请检查您的控制台日志。
-
jQuery 仅在页面运行时才知道页面中的元素,因此添加到 DOM 的新元素无法被 jQuery 识别。为了解决这个问题,请使用event delegation,将新添加的项目中的事件冒泡到 DOM 中的某个点,当 jQuery 在页面加载时运行时该点就在那里。很多人使用
document作为捕捉冒泡事件的地方,但没有必要一直爬到 DOM 树上。理想情况下you should delegate to the nearest parent existing at the time of page load. -
ID's Must Be Unique,特别是因为当您尝试与这些元素交互时,它会导致JavaScript 和 CSS 出现问题。
标签: javascript php jquery ajax