为什么在 ExtJs 中禁用节点会使复选框仍然可用?
Why disabling node in ExtJs makes checkbox still available?
我正在使用与 Magento 捆绑在一起的 ExtJs 在检查节点后禁用一行中的类别节点。
我可以禁用来自相同 'level' 的节点,但复选框输入仍然可用于检查它们。
到目前为止,这是我的代码:
tree.on('check', function(node) {
if(node.attributes.checked) {
categoryAdd(node.id);
//disable nodes except checked Node
for (var i = 0; i < node.parentNode.childNodes.length; i++) {
var actualNode = node.parentNode.childNodes[i];
if (!actualNode.attributes.checked) {
actualNode.disable();
}
}
} else {
categoryRemove(node.id);
//enable all nodes
for (var i = 0; i < node.parentNode.childNodes.length; i++) {
var actualNode = node.parentNode.childNodes[i];
actualNode.enable();
}
}
varienElementMethods.setHasChanges(node.getUI().checkbox);
}, tree);
这是为了理解这段代码的作用而捕获的。
要禁用输入或将输入设置为只读模式,您应该使用 DomQuery 并为每个输入设置属性:
var readonly = true;
var checkBoxes = Ext.DomQuery.select("DIV[@id='" + myTreeid + "']")[0].getElementsByTagName("input");
Ext.each(checkBoxes, function(cb){
cb.setAttribute('disabled', readonly);
});
我正在使用与 Magento 捆绑在一起的 ExtJs 在检查节点后禁用一行中的类别节点。
我可以禁用来自相同 'level' 的节点,但复选框输入仍然可用于检查它们。
到目前为止,这是我的代码:
tree.on('check', function(node) {
if(node.attributes.checked) {
categoryAdd(node.id);
//disable nodes except checked Node
for (var i = 0; i < node.parentNode.childNodes.length; i++) {
var actualNode = node.parentNode.childNodes[i];
if (!actualNode.attributes.checked) {
actualNode.disable();
}
}
} else {
categoryRemove(node.id);
//enable all nodes
for (var i = 0; i < node.parentNode.childNodes.length; i++) {
var actualNode = node.parentNode.childNodes[i];
actualNode.enable();
}
}
varienElementMethods.setHasChanges(node.getUI().checkbox);
}, tree);
这是为了理解这段代码的作用而捕获的。
要禁用输入或将输入设置为只读模式,您应该使用 DomQuery 并为每个输入设置属性:
var readonly = true;
var checkBoxes = Ext.DomQuery.select("DIV[@id='" + myTreeid + "']")[0].getElementsByTagName("input");
Ext.each(checkBoxes, function(cb){
cb.setAttribute('disabled', readonly);
});