javascript - 禁用选中/取消选中复选框时的输入

标签 javascript php html checkbox

我有 2 个复选框和 2 个用于邮件和电话的输入标签。

我的要求是当我检查邮件时我想禁用电话输入,反之亦然。但在选中这两个复选框时,我想保持两个输入均处于启用状态。

这是我的 fiddle 。这是无法在 fiddle 上运行的代码,因为我以前从未使用过它。但它正在我的本地主机上运行。

问题是,当我选中两个复选框然后多次取消选中时,效果不佳。

HTML

<input type="checkbox" id="check_email" name="check_email" onchange="disablePhone()" /> Email
<input type="checkbox" id="check_phone" name="check_phone" onchange="disableEmail()" /> Phone


脚本

var chk_mail = 0;
var chk_phone = 0;
var unchk = 0;

function disablePhone()
{
    if(unchk == 1)
    {
        document.getElementById("ref_email").disabled = true;
        unchk = 0;
        //alert("disablePhone")
    }
    if(chk_mail == 0 && unchk == 0)
    {
        if(document.getElementById("check_email").checked == true)
        {
            document.getElementById("form-field-phone").disabled = true;
            chk_mail = 1;
        }
    }
    else if( chk_mail == 1 && unchk == 0)
    {
        document.getElementById("check_email").checked = false;
        document.getElementById("form-field-phone").disabled = false;
        chk_mail = 0;
    }
    if(chk_phone ==1 && chk_mail == 1)
    {
        document.getElementById("ref_email").disabled = false;
        document.getElementById("form-field-phone").disabled = false;
        chk_phone = 0;
        unchk = 1;
    }
}

function disableEmail()
{
    if(unchk == 1)
    {
        document.getElementById("form-field-phone").disabled = true;
        unchk = 0;
        //alert("disableEmail")
    }

    if(chk_phone == 0 && unchk == 0)
    {
        if(document.getElementById("check_phone").checked == true)
        {
            document.getElementById("ref_email").disabled = true;
            chk_phone = 1;
        }
    }
    else if(chk_phone == 1 && unchk == 0)
    {
        document.getElementById("check_phone").checked = false;
        document.getElementById("ref_email").disabled = false;
        chk_phone = 0;
    }
    if(chk_phone ==1 && chk_mail == 1)
    {
        document.getElementById("ref_email").disabled = false;
        document.getElementById("form-field-phone").disabled = false;
        chk_phone = 0;
        unchk = 1;
    }       
}

最佳答案

我在 JS 中添加了 eventlisteners 并稍微改变了逻辑。该脚本首先检查两个框是否都被选中。确实如此,然后启用这两个字段。如果没有禁用右侧字段。

(function() {
    document.getElementById('check_email').addEventListener('change', disableInput, false);
    document.getElementById('check_phone').addEventListener('change', disableInput, false);
    function disableInput() {
        var emailChecked = document.getElementById('check_email');
        var phoneChecked = document.getElementById('check_phone');
        var email = document.getElementById('ref_email');
        var phone = document.getElementById('form-field-phone');
        
        if(emailChecked.checked == phoneChecked.checked) {
            email.disabled = false;
            phone.disabled = false;
        } else if(emailChecked.checked) {
            phone.disabled = true;
        } else {
            email.disabled = true;
        }
    }
})();
<input type="checkbox" id="check_email" name="check_email" /> Email
<input type="checkbox" id="check_phone" name="check_phone" /> Phone
<br>
<input type="email" id="ref_email"  name="ref_email" placeholder="Email ID" />
<input type="text" id="form-field-phone" name="form-field-phone" placeholder="Phone"/>

关于javascript - 禁用选中/取消选中复选框时的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25948322/

相关文章:

javascript - 画一棵二叉树

javascript - 控制台因不满足条件而出错

来自json的url中的php数组

jquery - 如何编写一个 jQuery 函数将 data-id 循环以显示某个元素?

javascript - 重新触发 Javascript 事件是否安全?

javascript - 这个 websocket 结果的哪一部分是二进制 protobuf 数据?

php - MySql:如何从表中删除具有特定 ID 的行除外的行

从数据库输入到联系表的php mysql数据

javascript - 链接和按钮未对齐

html - 为什么调整导航栏大小时我的图像消失了