首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ajax +浏览器返回按钮=复选框不起作用

Ajax +浏览器返回按钮=复选框不起作用
EN

Stack Overflow用户
提问于 2015-01-09 07:59:21
回答 1查看 415关注 0票数 0

我有一个内容页面,这是通过Ajax与它的复选框加载。当我单击网页上的普通菜单按钮以访问内容时,复选框就会正常工作。但是,当我转到另一个页面并使用“后退”按钮返回到包含复选框的页面时,复选框停止工作。

html:

代码语言:javascript
复制
<div id="filters">
    <ul id="filters-background">
        <li id="option-type">Filter Options</li>
        <li class="wave2"><label for="white">White<input type="checkbox" name="white" value=".White" id="white"></label></li>
        <li class="wave2"><label for="blue">Blue<input type="checkbox" name="blue" value=".Blue" id="blue"></label></li>
    </ul>
</div>

<script type="text/javascript">
    OnSort();
</script>

js:

代码语言:javascript
复制
function OnSort(e) {
    console.log('aaa');

    // filter button click
    var filterCheckboxes = $('#filters input');
    var filters = [];
    filterCheckboxes.change(function() {
        console.log('clicked checkbox');

        filterCheckboxes.filter(':checked').each(function() {
            console.log('working');
            filters.push( this.value );
        });
    });
}

如果你看上面的代码,当我点击后退按钮时,控制台将输出'aaa‘,但如果我测试一个复选框,它将不会在控制台中输出’点击的复选框‘。如何才能使复选框在使用浏览器的“后退”按钮后仍能正常工作?

也许相关的PageLoad和Backbutton Ajax代码:

代码语言:javascript
复制
function OnLoadPage(e) {
    e.preventDefault();
    var pageurl = $(this).data('url');
    $.ajax({
        type: 'GET',
        url: pageurl,
        success: function(data) {
            $('#content').html(data['content']); // update content

            if(data['menu']) { // update menu
                $('#menu').html(data['menu']);
            }
            else {
                $('#menu').html('');
            }

            // update url
            window.history.pushState({path:pageurl}, '', pageurl);
        },
        error: function(response) {
           alert('ERROR:' + response.responseText);
        }
    });
}

function InitOverrideBrowserBackButton() {
    // override the back button to get the ajax content without page reload
    $(window).bind('popstate', function() {
        $.ajax({url:location.pathname+'?rel=tab', success: function(data){
            $('#content').html(data['content']); // update content

            if(data['menu']) { // update menu
                $('#menu').html(data['menu']);
            }
            else {
                $('#menu').html('');
            }
        }});
    });
}

我也尝试过:

代码语言:javascript
复制
$(document).on('click', '#filters input', function() {
    console.log('clicked checkbox');

    filterCheckboxes.filter(':checked').each(function() {
        console.log('working');
        filters.push( this.value );
    });
});

这将输出“aaa”和“clicked checkbox”,但不会输出“working”。

EN

回答 1

Stack Overflow用户

发布于 2015-01-09 09:05:07

在StackOverflow上的其他人的帮助下解决了这个问题。答案是这样的:

代码语言:javascript
复制
function OnSort(e) {
    console.log('aaa');

    // filter button click
    var filters = [];
    $(document).on('click', '#filters input', function() {
        console.log('clicked checkbox');

        $('#filters input', document).filter(':checked').each(function() {
            console.log('working');
            filters.push( this.value );
        });
    });
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27851737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档