【发布时间】:2015-06-18 18:57:16
【问题描述】:
背景:我正在开发一个小型 Web 应用程序。 AJAX 将成功将数据发布到操作(create.php),create.php 将执行必要的 mysql 查询。一旦 AJAX 完成,我会在div id="container"></div> 上附加一条消息,通知用户执行成功,然后清除内容“容器”以供将来使用;然而,问题就在这里。
问题: AJAX 执行后,我无法点击已加载到页面(page.php)的任何 HTML 链接。我必须刷新页面才能单击任何链接并跟随它们到达目的地。是什么导致这种情况发生,我该如何解决?
AJAX 不需要返回结果。一旦请求完成,它只需要执行指定的 jQuery 代码。凭直觉,我更改了 create.php 以回显 $_POST 数组并让 AJAX 作为结果返回它。一旦 AJAX 将结果加载到“容器”中,我仍然无法单击 page.php 上加载的任何链接
答案: AJAX 调用后 DOM 未重新加载,导致引导下拉菜单无法正常工作。每次调用后必须手动重新初始化引导下拉类。这个已经详细回答了here
创建.php
<?php
if($_POST){
//run mysql query
}else{
//do nothing
}
?>
form.php
<form id="new-items">
<input type="text" name="item" />
<input type="button" onclick="create_item()" name="Submit" value="Submit" />
</form>
page.php
<html>
<head>
<script>
$(document).ready(function(){
$("#add_items").click(function(){
event.preventDefault();
$("#content").load("form.php");
});
});
function create_item(){
var form_data = $("#new-items").serialize();
var request = $.ajax({
url: "create.php",
type: "POST",
data: form_data,
});
request.done(function(){
$("#content").append('<div>User was added successfully</div>');
setTimeout(function(){
$("#content").fadeOut("slow");
}, 5000);
setTimeout(function(){
$("#content").empty();
}, 8000);
});
request.fail(function(jqXHR, textStatus) {
alert( "Request failed: " + textStatus );
});
}
</script>
</head>
<body>
<nav>
<a href="link1.php">Link1</a>
<a href="link2.php">Link2</a>
<a href="#" id="add_items">Add New Items</a>
</nav>
<div id="content"></div>
</body>
</html>
【问题讨论】:
-
因为您在 php 文件中的 onclick 是在包含在它所在的 dom 中之前呈现的,因此它在点击时没有绑定到该函数。
-
$("#add_items").click(function(){应该是$("#add_items").click(function(e){,这样您就可以为e.preventDefault传递事件对象 -
在创建 dom 后在 @iam-decoder 上构建在 dom 中创建的项目,您可以在 jquery 中查找 api.jquery.com/on on 功能,我相信这取代了 jQuery live 功能此后已被弃用。
-
@iam-decoder .click() 函数工作正常。那不是我的问题。 onclick 函数 create_item() 有效。 AJAX 完成后,
<nav>部分中的任何<a href="">TEXT</a>链接在没有页面刷新的情况下都不起作用。 -
<nav>中我只能看到 1 个链接。其他链接是动态添加的吗?
标签: javascript php jquery html ajax