$(this).is(':checkbox')阻止检查

Cha*_*haz 1 javascript jquery

我有一个on click函数绑定到三个元素,第一个只触发它检查两个单选按钮并声明一个带有checked值的变量,第二个是复选框并声明变量值为那些,第三个元素是分页链接到声明并分配页面以将其发送到php.

我尝试添加,$(this).prop('checked', true);但单击时不检查复选框(我不知道是什么阻止它们):

$('body').on('click', '.click, :checkbox, .pag_link', function()
{
    // search, filters and change page buttons

    if ($('#res_prop').is(':checked')) {
        var use = $('#res_prop').val(); // 1
    }
    else if ($('#com_prop').is(':checked')) {
        var use = $('#com_prop').val(); // 0
    }
    else {
        $('p.error').show();
        die();
    }

    if ($(this).is(':checkbox')) {
        // not needed or it won't uncheck -> $(this).prop('checked', true);
        if ($(this).attr('class') == 'filter1' || $('.filter1').is(':checked')) {
            var type = $(this).val(); // maybe should be an array
        } else var type = null;
        if ($(this).attr('class') == 'filter2' || $('.filter2').is(':checked')) {
            var status = $(this).val(); // maybe should be an array
        } else var status = null;
        if ($(this).attr('class') == 'filter3' || $('.filter3').is(':checked')) {
            var bhk = $(this).val(); // maybe should be an array
        } else var bhk = null;
    }
    else {
        var type = status = bhk = null;
    }

    if ($(this).is('.pag_link')) {
        if ($(this).text() == '«')
            var page = (parseInt($('.active').text()) - 1);
        else if ($(this).text() == '»')
            var page = (parseInt($('.active').text()) + 1);
        else
            var page = parseInt($(this).text());
    }
    else {
        var page = 1;
    }

    $.ajax({
        method: 'POST',
        url: '/search',
        data: {
            'do': getUrlParameter('do'),
            'use': use,
            'type': type,
            'status': status,
            'bhk': bhk,
            'city': $('select[name="city"]').val(),
            'zone': $('select[name="zone"]').val(),
            'page': page
        }
    }).done(function(data) {
        if ($( '#search' ).is(':visible'))
            $( '#search' ).hide();

        if ($(this).is(':checkbox')) {
            var new_content = $(data).find( '#scroll-to-list' );
            $( '#scroll-to-list' ).replaceWith( new_content );
        }
        else {
            var new_content = $(data).find( '#search-filters, #scroll-to-list' );
            $( '#results' ).html( new_content );
        }

        $( 'html, body' ).animate({
            scrollTop: $( '#scroll-to-list' ).offset().top
        }, 1000);
    });

    //return false;
});
Run Code Online (Sandbox Code Playgroud)

对不起,我需要学习简化代码.

编辑:添加小提琴:http://jsfiddle.net/h25ruso1/

Ano*_*shi 5

问题在于return false您的代码声明.由于您已将事件附加到父元素(body),因此返回false语句将充当event.preventDefault().即,事件处理程序阻止默认行为,在您的情况下,它正在检查复选框.

工作小提琴