簡體   English   中英

如果選中了復選框2,則復選框1被禁用

[英]Checkbox 1 is disabled if Checkbox 2 is checked

我在Firefox插件選項中有兩個復選框。 如果選中了復選框2,則需要禁用復選框1。

函數“ onOpenedOptions”在打開選項時檢查變量(復選框2)的真/假(選中/未選中),如果選中兩個復選框則禁用復選框1。

當我已經打開選項並選中/取消選中復選框2時,我需要更改復選框1的“禁用屬性”。 這是“ onChangedCheckbox”功能,但是if(document.getElementById('checkboxTwo').checked)不起作用

如何驗證checkboxTwo是否已選中?

同樣document.querySelector('#checkboxTwo')不起作用。 這就是為什么我現在只使用document

在此處輸入圖片說明

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);

我沒有使用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值。 您正在為首選項和復選框執行的操作。

我知道了。

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;
}

在XUL中,通過屬性模擬檢查狀態。 這意味着您可以執行以下操作: if(document.getElementById('checkboxTwo').getAttribute("checked") == "true")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM