我已经阅读了一些关于此主题的帖子,但似乎没有人回答哪种方法最适合允许子页面访问主页的<script>
部分。< / p>
我加载了home.php
,其中有两个<div>
部分之一显示了一个菜单。此菜单的HTML位于home.php
本身。用户可以通过home.php
上的脚本与home.php
的菜单部分中的按钮和下拉菜单进行互动,例如:
$("#graphsButton").click(function() {
if($(this).text()=="Graphs") {
$(this).html("<span><i class='fa fa-check-circle checked'></i> Graphs</span>");
graph = true;
} else {
$(this).html("<span>Graphs</span>");
graph = false;
}
});
用户执行初始操作后,使用以下代码将较大的菜单替换为较小的菜单,为用户提供更多的屏幕空间:
function shrinkMenu() {
$('#search').html('');
$('#search').animate({
width: '4%'
}, 500);
$('#returnMain').animate({
width: '96%'
}, 500);
$('#search').load('smallMenu.php');
}
如果用户想要返回大菜单,请在smallMenu.php
上找到另一个<script>
部分,其中包含以下代码:
$('#growMenu').click(function () {
$('#search').html('');
$('#search').animate({
width: '20%'
}, 500);
$('#returnMain').animate({
width: '80%'
}, 500);
$('#search').load('largeMenu.php');
});
largeMenu.php
包含与home.php
一起加载的菜单的原始HTML的副本,在视觉上,它看起来与用户完全相同。
当我在大菜单和小菜单之间切换时,<script>
中包含的home.php
部分与原始菜单中的id
标记相关加载home.php
的内容不再有效。
为了使它工作,似乎我必须在每个页面加载时重新初始化我的所有插件,并维护3个单独的页面&#39; <script>
部分彼此重复,这似乎非常低效,可能不是解决此问题的最佳方式。
我是否有更好的方法来实现我在此处编写的功能?
我的代码在高级别看起来像这样:
<div class="searchParent" id="search">
<div class="return"></div>
<div class="menu">
<div class="largeMenu" id="largeMenu"></div>
</div>
</div>
答案 0 :(得分:1)
通过从包含“部分视图”(即菜单HTML)的php文件替换菜单,您正在做的事情很好。部分视图依赖于父页面代码,因此您无需将父脚本中的任何代码复制到局部视图中。部分视图可以预期父页面上可以使用脚本代码。
当我在大菜单和小菜单之间切换时, home.php中包含的与属性中的id标签相关的部分 加载home.php的原始菜单HTML不再有效。
您遇到的问题是,您需要确保引用这些菜单的home.php
上的代码使用父容器作为其参考点而不是直接ID。您正在替换元素(菜单),因此当您这样做时绑定会丢失,除非您绑定在未被替换的DOM上方的父级(请记住事件冒泡)。
从我在代码片段中看到的内容看起来,菜单已加载到#search
容器中。因此,请确保home.php
中的代码使用该容器作为参考点,使用类似on
之类的内容:
$('#search').on('click', '#graphsButton', function() {
// ...
});