如果选中复选框2,则禁用复选框1

时间:2015-08-11 07:07:34

标签: javascript checkbox firefox-addon

我在Firefox插件的选项中有两个复选框。如果选中复选框2,我需要禁用复选框。

功能" onOpenedOptions"当选项打开时,检查变量的真/假(选中/未选中)(复选框2)如果选中两个,则禁用复选框一。

我需要更改"禁用属性"我已经打开选项&选中/取消选中复选框二。这是" onChangedCheckbox"功能,但if(document.getElementById('checkboxTwo').checked)无效

如何验证checkboxTwo是否已被选中?

document.querySelector('#checkboxTwo')也不起作用。这就是我现在只使用document

的原因

enter image description here

options.xul:

<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<prefwindow id="test_prefwindow" title="Test" 
    xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
    <prefpane id="test_prefpane" label="Preferences" >
        <preferences>
            <preference id="checkboxOne" name="extensions.checkboxOne" type="bool"/>
            <preference id="checkboxTwo" name="extensions.checkboxTwo" type="bool"/>
        </preferences>

        <row style="display:inline-block">
            <checkbox id="checkboxOne" preference="checkboxOne" label="Checkbox One" style="vertical-align:middle;"/>
            <checkbox id="checkboxTwo" preference="checkboxTwo" label="Checkbox Two" style="vertical-align:middle;"/>
        </row>
    </prefpane>
    <script type="application/x-javascript" src="chrome://test/content/options.js"/>
</prefwindow>

options.js:

function onOpenedOptions() {
    var prefManager = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
    if (prefManager.getBoolPref("extensions.checkboxTwo"))
        document.getElementById('checkboxOne').disabled=true;
}
document.addEventListener('DOMContentLoaded', onOpenedOptions);

function onChangedCheckbox() {
    if (document.getElementById('checkboxTwo').checked) 
        document.getElementById('checkboxOne').disabled=true;
    else document.getElementById('checkboxOne').disabled=false;
}
document.addEventListener("click", onChangeCheckbox);
//document.querySelector('#checkboxTwo').addEventListener("click", onChangedCheckbox);

3 个答案:

答案 0 :(得分:0)

我在没有javascript的情况下对此进行了测试,只是xul并没有遇到任何问题。尝试将首选项上的ID设置为不同。所以试试这个:

<prefpane id="test_prefpane" label="Preferences" >
    <preferences>
        <preference id="PREFERENCE____checkboxOne" name="extensions.checkboxOne" type="bool"/>
        <preference id="PREFERENCE____checkboxTwo" name="extensions.checkboxTwo" type="bool"/>
    </preferences>

    <row style="display:inline-block">
        <checkbox id="checkboxOne" preference="PREFERENCE____checkboxOne" label="Checkbox One" style="vertical-align:middle;"/>
        <checkbox id="checkboxTwo" preference="PREFERENCE____checkboxTwo" label="Checkbox Two" style="vertical-align:middle;"/>
    </row>
</prefpane>

我很确定您无法在文档中使用相同的id值。你为偏好和复选框做了哪些。

答案 1 :(得分:0)

我明白了。

XUL:

<checkbox id="checkboxOne" preference="checkboxOne" label="Checkbox One"/>
<checkbox id="checkboxTwo" preference="checkboxTwo" oncommand="onChangedCheckbox(event.target)" label="Checkbox Two"/>

JS:

function onOpenedOptions() {
    var prefManager = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
    if (prefManager.getBoolPref("extensions.checkboxTwo"))
        document.getElementById('checkboxOne').disabled=true;
}
document.addEventListener('DOMContentLoaded', onOpenedOptions);

function onChangedCheckbox(source) {
    if(source.checked) document.getElementById('checkboxOne').disabled=true;
    else document.getElementById('checkboxOne').disabled=false;
}

答案 2 :(得分:0)

在XUL中,通过属性模拟已检查状态。这意味着您可以执行:if(document.getElementById('checkboxTwo').getAttribute("checked") == "true")