checkbox - 在XUL树中,我应该捕获什么事件来捕获复选框更改?

  显示原文与译文双语对照的内容

我有这一点。


<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<?xml-stylesheet href="chrome://zotero-report-customizer/skin/options.css"?>
<!DOCTYPE window SYSTEM"chrome://zotero-report-customizer/locale/zotero-report-customizer.dtd">
<prefwindow id="zotero-report-customizer-perf" title="&zotero-report-customizer.name;" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" onload="initializePrefs();">
 <stringbundleset id="stringbundleset">
 <stringbundle id="zotero-report-customizer-options" src="chrome://zotero-report-customizer/locale/options.properties"/>
 <stringbundle id="zotero-options" src="chrome://zotero/locale/zotero.properties"/>
 </stringbundleset>
 <prefpane label="&zotero-report-customizer.remove;" id="zotero-report-customizer-perfpane">
 <preferences id="preferences"/>
 <groupbox>
 <caption label="&zotero-report-customizer.remove;"/>
 <tree flex="1" id="treeCollection" seltype="single" hidecolumnpicker="true" height="400" editable="true" onselect="togglePref(this);">
 <treecols>
 <treecol id="show" primary="true" type="checkbox" label="Show" editable="true" width="40"/>
 <treecol id="field" label="Field" editable="false" flex="1"/>
 </treecols>
 <treechildren id="itemTypes"/>
 </tree>
 </groupbox>
 </prefpane>
 <script src="chrome://zotero/content/include.js"/>
 <script src="chrome://zotero-report-customizer/content/include.js"/>
 <script src="options.js"/>
</prefwindow>

我添加了带有复选框dynamially的树行;它们显示得很好。 但是,"在。"事件是否为suppused捕获注意复选框? Onselect不执行这里操作。

时间: 作者:

我最初理解你的问题。

不能向树的rows/cols/cells 中添加事件处理程序,只能向 <tree> 本身添加事件处理程序。 你可以在树上发现一个'单击'事件,然后需要找出点击 finally,以及,你应该怎么做。

用于从鼠标单击事件获取 <treecell>的MDN 代码段:

XUL:


<tree id="my-tree" onclick="onTreeClicked(event)">

javascript :


function onTreeClicked(event){
 var tree = document.getElementById("my-tree");
 var tbo = tree.treeBoxObject;

//get the row, col and child element at the point
 var row = { }, col = { }, child = { };
 tbo.getCellAt(event.clientX, event.clientY, row, col, child);

 var cellText = tree.view.getCellText(row.value, col.value);
 alert(cellText);
}

这里时,不要警告 cellText,你应该检查 treeCell ( 在 checkbox 模式) 是否已经检查并相应地执行。

<tree>文档中对MDN进行了说明:


var cellChecked = tree.view.getCellValue(row.value, col.value) == 'true';

确保 cols/单元格标记为 editable,否则可能无法工作 !

作者:
...