我有一个带有一些复选框的页面设置,UI.button应用于这些复选框。它们每个都有一个onclick事件,该事件调用一个函数,该函数将显示一个选项卡(如果选中)或删除选项卡(如果未选中)。
问题是,如果您快速单击它们,最终可能会显示一个选项卡,而复选框显示为未选中,反之亦然。
我已经尝试删除onclick事件,使其成为dblclick事件。此外,我还通过attr()和.button禁用了复选框("option","disabled",true),但没有成功解决问题。
我的相关代码如下:
创建复选框的PHP:
$output .= '<input onclick="toggleTab(''' . $group['_id'] . ''', this);" type="checkbox" name="groups" value="'.$group['_id'].'" id="groups_'.$group['_id'].'" /><label id="l_'.$group['_id'].'" for="groups_'.$group['_id'].'">'.$group['name'].'</label>';
单击时调用的javascript函数:
function toggleTab (id, elem) {
if ($(elem).is(':checked')) {
$('#tab_' + id ).show();
} else {
var currentTab = $('#tabPricing .ui-tabs-panel:not(.ui-tabs-hide)');
tab = currentTab.prop("id");
if (tab == 'tab' + id) {
$('#tabPricing .innerTabs').tabs('select', 'tabDefault');
}
$('#tab_' + id ).hide();
}
}
我知道这可能是一个JavaScript问题,但我似乎找不到解决它的好方法。
我以前遇到过这个问题,似乎是时间问题。在某些浏览器中使用is:check-on-click命令(就像我的问题一样)时机不对。我想说的是,我发现的问题是,点击的执行速度往往快于选中复选框的lib。我所做的反击是不使用onclick或.click,而是使用.change来代替
例如
$("input[type=checkbox]").change(function(e) {
// preform some actions here, like show or hiding somthing or whatever
});
根据我的经验,每次复选框被选中或取消选中时,.change都会触发,因此你可以更准确地读取
Fiddle示例