我想分开这些功能。它们都应分别处理点击事件:
第一功能
$("ul.nav li").delegate("a", "click", function() {
window.location.hash = $(this).attr("href");
return false;
});
$(window).bind('hashchange', function(){
newHash = window.location.hash.substring(1);
if (newHash) {
ACTION A
});
$(window).trigger('hashchange');
});
第二功能
$("ul.subnav li").delegate("a", "click", function() {
window.location.hash = $(this).attr("href");
return false;
});
$(window).bind('hashchange', function(){
newHash = window.location.hash.substring(1);
if (newHash) {
ACTION B
});
$(window).trigger('hashchange');
});
这是在动作A中发生的情况:
$mainContent
.find(".maincontent")
.fadeOut(200, function() {
$mainContent.hide().load(newHash + " .maincontent", function() {
$mainContent.fadeIn(200, function() {
$pageWrap.animate({
height: baseHeight + $mainContent.height() + "px"
});
});
$(".nav a").removeClass("active");
$(".nav a[href="+newHash+"]").addClass("active");
});
});
问题是,如果我单击“第二个功能”的链接,则始终会触发第一个功能。
我要执行的操作的详细信息:
首先,我在.php上构建我的网站,以提供没有JavaScript的人。现在,我想动态加载“ maincontent”。所以我找到了我正在使用的脚本:
http://css-tricks.com/6336-dynamic-page-replacing-content/
如果您只想加载“ maincontents”,它将做得很好。
但是我的网站在某些页面上有子导航,我想在其中加载子内容。在.php中,这些站点使用包括。因此,我通过以下方式获取内容:href =“ page2.php?page = sub1”
因此,当我单击子链接时,它们也会动态加载,但脚本也会加载到整个maincontent加载区域。因此它并没有真正通过.load()加载内容,但是包含的子内容确实出现了。
所以我认为只是要分开此功能。第一个简单地加载主要内容,第二个简单地加载子内容,以仅刷新子内容区域。由于该链接是直接的page2.php?page = sub1链接,因此我什至不了解此脚本如何动态加载包含内容。所有动态加载的内容通常看起来像“ #index”,而没有“ .php”结尾。
一些快速的历史记录:
我正在尝试获得最佳的页面结构。为非JavaScript用户提供.php,然后在其上放置一些动态加载内容。始终以保持每个页面的浏览器导航和浏览器链接(用于共享)为目标。
我不是jQuery专家。到目前为止,我所学到的只是通过反复试验和一些逻辑思考。但是,当然,我缺乏JavaScript的基础知识。
所以我的“逻辑”问题:
如何告诉“ nav”链接仅执行其“ $(window).bind”事件,如何告诉“ subnav”链接仅执行其“ $(window).bin”事件。
这是正确的想法吗?
由于我已经尝试将近18h的时间来解决它,因此我将不胜感激。
谢谢。
重要:
使用第一个功能,我不仅加载了maincontent,而且还通过每个链接更改了页面上的div。因此,对于任何可能希望将其组合在一起的解决方案来说,它都行不通,因为他们应该在页面上的不同区域执行不同的操作。这就是为什么我真的需要调用window.bind与每次导航/ subnav单击。
谁能告诉我如何?
最佳答案
梅洛斯
在第二个函数中,您绑定了错误的事件hashchange2
。相反,您仍然想绑定到hashchange
。代替:
$(window).bind('hashchange2', function() {
...
});
尝试:
$(window).bind('hashchange', function() {
...
});
如果要为事件订阅命名空间,可以在绑定的事件的结尾后加上句点(
.
),然后再命名空间:$("#test").bind("click.namespace1", function() { });
$("#test").bind("click.namespace2", function() { });
关于javascript - 如何分隔两个jQuery函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7456783/