我之前问了一个关于这段代码的问题,但现在我有另一个问题。
我跟随了一个AJAX教程(https://www.youtube.com/watch?v=WwngGtboldU)来学习如何防止网站的某些部分加载。你可以看到,在17:50,他点击了链接,而不是整个页面加载,只有一个特定的部分加载。
这对我来说都很有效。但是,我有一个init.js文件,我想应用到content/cats.php。尽管init.js包含在header.php中,但当它被拉入时,它并不应用于content/cats.php。如何解决这个问题?
我试过把
<script src="js/init.js"></script>
在cats.php开头和content/cats.php开头,但这不起作用。
我正在使用XAMPP。
我代码:style.css
body{
background-color: aqua;
}
ul#nav {
list-style:none;
padding:0;
margin: 0 0 10px 0;
}
ul#nav li {
display:inline;
margin-right:10px;
}
#PureTestDiv {
background-color:red;
width:400px;
height:200px;
}
#PureTestDiv2 {
background-color:blue;
width:400px;
height:200px;
display:none;
}
header。php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>History API</title>
<link type="text/css" rel="stylesheet" href="css/style.css" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script src="js/init.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
</head>
<body>
<nav id="main">
<ul>
<li><a href="cats.php">Cats</a></li>
<li><a href="dogs.php">Dogs</a></li>
</ul>
</nav>
footer。php
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script>
$(document).ready(function() {
var nav, content, fetchAndInsert;
nav = $('nav#main');
content = $('section#content');
//Fetches and inserts content into the container
fetchAndInsert = function(href) {
$.ajax({
url: 'http://localhost/WebsiteFolder/content/' + href.split('/').pop(),
method: 'GET',
cache: false,
success: function(data){
content.html(data);
}
});
}
//User goes back/forward
$(window).on('popstate', function() {
fetchAndInsert(location.pathname);
});
nav.find('a').on('click', function(e) {
var href = $(this).attr('href');
//Manipulate history
history.pushState(null, null, href);
//Fetch and insert content
fetchAndInsert(href);
e.preventDefault();
});
});
</script>
</body>
</html>
cats.php
<?php
require 'views/header.php';
?>
<section id="content">
<?php require 'content/cats.php'; ?>
</section>
<?php
require 'views/footer.php';
?>
内容/cats.php Cats say meow
<div id="PureTestDiv">PureTestDiv 1</div>
<br>
<div id="PureTestDiv2">PureTestDiv 2</div>
dogs.php
<?php
require 'views/header.php';
?>
<section id="content">
<?php require 'content/dogs.php'; ?>
</section>
<?php
require 'views/footer.php';
?>
内容/dogs.php Dogs say woof
init.js
$(function () {
$('#PureTestDiv').click(function () {
$('#PureTestDiv2').fadeIn();
});
});
这段代码显示代码应该可以工作:http://jsfiddle.net/mgswrv55/
有一个简单的解决方案,js文件被加载,jQuery选择器应用于所有元素到js文件运行时存在的所有元素,其中不包括AJAX加载的内容。
当.on()被调用时,如果一个元素不存在,事件将不会绑定到它。
如果您希望为动态加载的内容添加事件处理程序,您应该使用以下命令:
$(parentElement).on("click", selector, function(event) {
//your code
});
在您的特定情况下,下面的代码应该起作用:
$(document).on("click", '#PureTestDiv', function(event) {
//do stuff
});