微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

html – 如何用不确定的复选框处理浏览器的差异

入门:HTML复选框可以设置为不确定,将其显示为既不选中也不取消选中。即使在这个不确定状态下,仍然有一个基本的布尔检查状态。

当单击不确定的复选框时,它将失去其不确定状态。根据浏览器(Firefox),它可以另外切换所选属性

This jsfiddle说明情况。在Firefox中,单击任何一个复选框将导致它们切换其初始底层检查状态。在IE中,已检查的属性被单独保留,用于首次点击。

我希望所有浏览器的行为相同,即使这意味着额外的JavaScript。不幸的是,在调用onclick处理程序(或onchange和jquery更改)之前,将indeterminate属性设置为false,因此我无法检测是否在不确定的复选框上单击它。

mouseup和keyup(用于空格键切换)事件显示先前的不确定状态,但我宁可不那么具体:看起来很脆弱。

我可以在复选框中保留一个单独的属性(数据不确定或类似),但是我想知道是否有一个简单的解决方案,或者其他人遇到类似的问题。

解决方法

如果您想要在所有浏览器上单击(或至少在IE,Chrome和FF5上)检查所有浏览器,您需要正确初始化已检查的属性,如 http://jsfiddle.net/K6nrT/6/所示。我已经写了以下功能帮你:
/// Gives a checkBox the inderminate state and the right
/// checked state so that it becomes checked on click
/// on click on IE,Chrome and Firefox 5+
function makeIndeterminate(checkBox)
{
    checkBox.checked = getCheckedStateForIndeterminate();
    checkBox.indeterminate = true;
}

和依赖于特征检测的有趣的功能

/// Determine the checked state to give to a checkBox
/// with indeterminate state,so that it becomes checked
/// on click on IE,Chrome and Firefox 5+
function getCheckedStateForIndeterminate()
{
    // Create a unchecked checkBox with indeterminate state
    var test = document.createElement("input");
    test.type = "checkBox";
    test.checked = false;
    test.indeterminate = true;

    // Try to click the checkBox
    var body = document.body;
    body.appendChild(test); // required to work on FF
    test.click();
    body.removeChild(test); // required to work on FF

    // Check if the checkBox is Now checked and cache the result
    if (test.checked)
    {
        getCheckedStateForIndeterminate = function () { return false; };
        return false;
    }
    else
    {
        getCheckedStateForIndeterminate = function () { return true; };
        return true;
    }
}

没有图像技巧,没有jQuery,没有额外的属性,没有事件处理涉及。这仅仅依赖于简单的JavaScript初始化(请注意,不能在HTML标记中设置“不确定”属性,因此JavaScript原始化也是必需的)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Mip是什么意思以及作用有哪些
怎么测试Mip页面运行情况
MIP安装的具体步骤有哪些
HTML添加超链接、锚点的方法及作用详解(附视频)
MIP的规则有哪些
Mip轮播图组件中的重要属性讲解
Mip的内联框架组件是什么
怎么创建初始的MIP配置及模板文件
HTML实现多选框及无法提交多数据的原因分析(附视频)
HTML如何设置复选框、单选框以及默认选项?(图文+视频)