jQuery .is( ":focus" ) 无法识别 IE 以外的浏览器中的复选框



我有一个复选框和一个文本输入。它的工作原理如下:选中复选框时,光标将转到文本输入。当文本输入失去焦点时,我会查看文本输入值是否为空。如果是,我将取消选中复选框。

问题是当它因为我第二次点击复选框而失去焦点时。。。复选框取消选中,然后再次选中,所以我不能取消选中它。

我通过查看新的焦点元素是否为复选框来解决此问题。如果不是,我会照常进行。这在IE中非常有效,但在我测试过的其他浏览器(Chrome、Firefox、Safari)中则不然。

有人知道如何让它发挥作用吗?或者可能是一个不同的解决方案?

我对模糊功能的实际问题:http://jsfiddle.net/4mJuU/5/(仅适用于IE)

只需输入文本即可实现简单焦点http://jsfiddle.net/HWFHv/2/(作品)

只需一个复选框即可简单聚焦http://jsfiddle.net/sXqcG/1/(在Chrome/Safari中不起作用)

$('#cbx').live('click', function() {
    if ($(this).is(':checked')) {
        $('#txt').focus();
    }
    else {
        $('#txt').val('');
    }
});
$('#txt').live('blur', function(event) {
    //var doesCbxHaveFocus = document.activeElement.id == 'cbx';
    var doesCbxHaveFocus = $('#cbx').is(':focus');
    console.log(doesCbxHaveFocus);
    if (!doesCbxHaveFocus) {
        if ($(this).val() == '') {
            $('#cbx').prop('checked', false);
        }
        else {
            $('#cbx').prop('checked', true);
        }
    }
});

可能是在聚焦复选框之前触发的模糊事件。所以,当模糊处理程序执行焦点尚未发生时,这就是.is(":焦点")不起作用的原因。你可以试试类似的smth

setTimeout(onBlurFunc, 10);

或者找到更好的解决方法,但问题就在这里。onBlurFunc这里是您附加到文本输入模糊事件的函数

最新更新