찾다

 >  Q&A  >  본문

javascript - 获取不到onpopstate事件的state?

代码如下:

$(function() {
    $('a').bind('click', function() {
        var actionObj = $(this);
        var actionText = actionObj.text();
        var stateObj = {
            title : actionText,
            url : actionObj.attr('href'), 
            msg : actionText
        };

        window.history.pushState(stateObj, actionObj, actionObj.attr('href'));

    });

    window.onpopstate = function(e) {
        console.log(e.state);
    };
})

查了一些资料,完全不知道问题在哪里……

chrome 或者 firefox 都不行……不知道哪里做错了……

巴扎黑巴扎黑2775일 전951

모든 응답(2)나는 대답할 것이다

  • PHPz

    PHPz2017-04-10 12:43:28

    其实你只需要理解一点,onpopstate是在history.back()之后调用的。所以这个时候e.state里返回实际上是back之后的状态,比如我在下面的代码里。一次push了两个state,当我点击一次后退的时候{page : 2}的state已经pop出去了,这时候e.state里就只剩下{page : 1}了。

    (function() {
        $('a').bind('click', function() {
            window.history.pushState({page : 1}, 'test', '#test1');
            window.history.pushState({page : 2}, 'test', '#test2');
            return false;
        });
    
        window.onpopstate = function(e) {
            console.log(e.state);
        };
    })();

    회신하다
    0
  • 巴扎黑

    巴扎黑2017-04-10 12:43:28

    如果要获得pop出去的那个状态,可以先replaceState,然后再pushState

     window.history.replaceState({page : 1}, '', '');  
     window.history.pushState({}, '', '#test1');

    这样popstate事件触发的时候就能获得event.state的值为{page: 1}

    회신하다
    0
  • 취소회신하다