我使用了两个2 jquery(插件)脚本,一个用于导航,一个用于动态内容。
他们单独工作但不在一起。我厌倦了切换脚本,当我更改index.html中脚本的顺序时,最后开始工作的脚本就像忽略第一个脚本一样。例如,按此顺序菜单正在运行:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script>
<script src="js/jquery.ba-hashchange.min.js" type="text/javascript"></script>
<script src="js/dynamicpage.js" type="text/javascript"></script>
<script src="js/menu.js" type="text/javascript"></script>
按此顺序,动态内容正在运行:
<script src="js/menu.js" type="text/javascript"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script>
<script src="js/jquery.ba-hashchange.min.js" type="text/javascript"></script>
<script src="js/dynamicpage.js" type="text/javascript"></script>
这是dynamicpage.js:
$(function() {
var newHash = "",
$mainContent = $("#main-content"),
$pageWrap = $("#wrapper"),
baseHeight = 0,
$el;
$pageWrap.height($pageWrap.height());
baseHeight = $pageWrap.height() - $mainContent.height();
$("nav").delegate("a", "click", function() {
window.location.hash = $(this).attr("href");
return false;
});
$(window).bind('hashchange', function(){
newHash = window.location.hash.substring(1);
if (newHash) {
$mainContent
.find("#guts")
.fadeOut(200, function() {
$mainContent.hide().load(newHash + " #guts", function() {
$mainContent.fadeIn(200, function() {
$pageWrap.animate({
height: baseHeight + $mainContent.height() + "px"
});
});
$("nav a").removeClass("current");
$("nav a[href="+newHash+"]").addClass("current");
});
});
};
});
$(window).trigger('hashchange');
})(jQuery);
这是menu.js:
jQuery.fn.initMenu = function() {
return this.each(function(){
var theMenu = $(this).get(0);
$('.acitem', this).hide();
$('li.expand > .acitem', this).show();
$('li.expand > .acitem', this).prev().addClass('active');
$('li a', this).click(
function(e) {
e.stopImmediatePropagation();
var theElement = $(this).next();
var parent = this.parentNode.parentNode;
if($(parent).hasClass('noaccordion')) {
if(theElement[0] === undefined) {
window.location.href = this.href;
}
$(theElement).slideToggle('normal', function() {
if ($(this).is(':visible')) {
$(this).prev().addClass('active');
}
else {
$(this).prev().removeClass('active');
}
});
return false;
}
else {
if(theElement.hasClass('acitem') && theElement.is(':visible')) {
if($(parent).hasClass('collapsible')) {
$('.acitem:visible', parent).first().slideUp('normal',
function() {
$(this).prev().removeClass('active');
}
);
return false;
}
return false;
}
if(theElement.hasClass('acitem') && !theElement.is(':visible')) {
$('.acitem:visible', parent).first().slideUp('normal', function() {
$(this).prev().removeClass('active');
});
theElement.slideDown('normal', function() {
$(this).prev().addClass('active');
});
return false;
}
}
}
);
});
};
$(document).ready(function() {$('.menu').initMenu();});
请帮助,我会非常感激!
P.S。这是脚本的当前顺序,其中只有动态内容正在运行,菜单不起作用:
<script src="js/jquery-1.4.2.min.js" type="text/javascript"></script>
<script src="js/menu.js" type="text/javascript"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script>
<script src="js/jquery.ba-hashchange.min.js" type="text/javascript"></script>
<script src="js/dynamicpage.js" type="text/javascript"></script>
答案 0 :(得分:2)
在我看来,这两个脚本都绑定了<a>
和<nav>
内.menu
标签上的事件,并且最后两个return false
点击功能()。返回false将阻止事件传播并由其他脚本执行...
因此,实际上,您加载的最后一个脚本的click函数会在这些a
标记上添加点击绑定,首先执行,返回false,从而阻止调用第一个脚本的绑定。
如果这是问题,修改插件以使click函数返回true并调用event.preventDefault()可能会起作用(不是100%肯定这个)
修改强>
如果没有深入研究究竟应该做什么,但很难修复,但尝试在dynamicpage.js中替换它。
$("nav").delegate("a", "click", function() {
window.location.hash = $(this).attr("href");
return false;
});
用这个
$("nav").delegate("a", "click", function(e) {
window.location.hash = $(this).attr("href");
e.preventDefault()
return true;
});