0

我的 pjax 工作正常,但我需要对不同的pjax事件做不同的事情。这是我的pjax

//MainMenu
$(document).pjax('.menu li a', '.pjax_submenu', { fragment: '.pjax_submenu', timeout: 5000});

//SubMenu
$(document).pjax('.submenu li a', '.submenu', { fragment: '.submenu',  timeout: 5000 });

基本上我有这两个菜单,想在pjax:start和上做点什么pjax:end。不幸的是,这些事件总是被调用。例如:

$("body").on("pjax_event", ".pjax_submenu", function(e, category){
    $(document).on('pjax:start', function() {
        if(category === 1){
            $('.pjax_submenu').fadeOut(500);

        } else{
            $('.info').slideUp(500);

        }
    });
    $(document).on('pjax:end', function() {
        if(category === 1){
            $('.pjax_submenu').hide().fadeIn(500);
        } else{
            $('.info').hide().slideDown(500);
        }
    });
});

$("body").on("click", ".menu li a", function() {
    $(".pjax_submenu").trigger("pjax_event", 1);
});
$("body").on("click", ".submenu li a", function() {
    $(".pjax_submenu").trigger("pjax_event", 2);
});

我点击菜单或子菜单链接都没有关系,结果是所有pjax代码的执行。即使我这样做:

$("body").on("click", ".menu li a", function() {
    $(document).on('pjax:start', function() { stuff }
    $(document).on('pjax:end', function() { stuff }
});
$("body").on("click", ".submenu li a", function() {
    $(document).on('pjax:start', function() { stuff }
    $(document).on('pjax:end', function() { stuff }
});

它仍然执行 >both< 并且我似乎无法理解一种方法来区分pjax不同单击项目上的事件。

我想要做的是淡化主菜单点上的内容,并为子菜单信息框使用 slideUp/Down。

如果您需要任何其他信息,请告诉我,我们将不胜感激!

4

1 回答 1

0

我想分享我的解决方案,它不是太漂亮 - 但效果非常好!这也是我找到的唯一解决方案......

您将需要可读的 pjax 版本!

在 pjax.js 中搜索“pjax:end”。添加下面的段落:

fire('pjax:end', [xhr, options])

if(options.menu == 'main'){
    fire('pjax:main:end', [xhr, options])
}else if(options.menu == 'sub'){
    fire('pjax:sub:end', [xhr, options])
}

pjax 相同:开始!

然后,您可以声明您的 pjax 链接:

//MainMenu
$(document).pjax('.menu li a', '.pjax_submenu', {menu: 'main',fragment:'.pjax_submenu', timeout: 5000});
//SubMenu
$(document).pjax('.submenu li a', '.submenu', { menu: 'sub',fragment: '.submenu',  timeout: 5000 });

瞧,你有单独的事件:

//... for Main Menu
$(document).on('pjax:main:start', function() {
    console.log('pjax:main:start');

});

$(document).on('pjax:main:end', function() {
    console.log('pjax:main:end');

});

//... for Sub Menu
$(document).on('pjax:sub:start', function() {
    console.log('pjax:sub:start');

});
$(document).on('pjax:sub:end', function() {
    console.log('pjax:sub:end');

    $('.info') .slideDown(500);
});

希望这对将来的人有所帮助!干杯!

于 2013-10-22T18:43:50.833 回答