我想分开这些功能。它们都应分别处理点击事件:

第一功能

 $("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/

10-17 01:32