我有一个点击函数绑定到三个元素,第一个只是触发它检查两个单选按钮并声明一个带有选中值的变量,第二个是复选框并声明变量值为那些,第三个元素是分页链接,用于声明和分配页面以将其发送到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;
});
抱歉,我需要学习简化代码。
编辑:添加小提琴:http://jsfiddle.net/h25ruso1/
答案 0 :(得分:5)
问题在于代码的return false
语句。由于您已将事件附加到父元素(body
),因此返回false语句将充当event.preventDefault()。即,事件处理程序阻止默认行为,在您的情况下,它正在检查复选框。
答案 1 :(得分:0)
使用此代码,您可以检查复选框是否已选中:
<script>
if($("input#yourId").attr("checked" , true)) {
//Doing some functions
}
</script>
我认为您应该删除代码中的return false
以便更好地工作。