Javascript 如何禁用“dijit/form/Select”中选项的焦点?

Javascript 如何禁用“dijit/form/Select”中选项的焦点?,javascript,dojo,dijit.form,Javascript,Dojo,Dijit.form,我需要更改小部件的行为dijit/form/Select 小部件不应允许(从鼠标或使用键盘)对属性已禁用的选项进行聚焦:true 我想知道你是否能告诉我如何达到这个结果 需要([ “dijit/form/Select”, “dojo/_基座/窗口”, “dojo/domReady!” ],功能(选择,赢){ 变量选择=新选择({ 名称:'select2', 选项:[{ 标签:“瑞典汽车”, 值:“”, 残疾人士:对 }, { 标签:“沃尔沃”, 价值:“沃尔沃” }, { 标签:“萨博”, 价

我需要更改小部件的行为
dijit/form/Select

小部件不应允许(从鼠标或使用键盘)对属性
已禁用的选项进行聚焦:true

我想知道你是否能告诉我如何达到这个结果

需要([
“dijit/form/Select”,
“dojo/_基座/窗口”,
“dojo/domReady!”
],功能(选择,赢){
变量选择=新选择({
名称:'select2',
选项:[{
标签:“瑞典汽车”,
值:“”,
残疾人士:对
},
{
标签:“沃尔沃”,
价值:“沃尔沃”
},
{
标签:“萨博”,
价值:'萨博',
所选:真
},
{
标签:“德国汽车”,
值:“”,
残疾人士:对
},
{
标签:“梅赛德斯”,
价值:“梅赛德斯”
},
{
标签:“奥迪”,
价值:“奥迪”
}
]
},“选择”);
选择.on('change',函数(evt){
log('myselect_事件');
});
});

window.dojoConfig={
parseOnLoad:false,
异步:true
};

我使用猴子补丁解决了这个问题

解决方案包括:

  • 在标签中添加标记,以便自定义外观
  • 添加属性禁用:在项目选项中为true,因此项目不会在更改时触发
    onChange
  • 使用鼠标和键盘时禁用对组项目的关注
我仍然很想知道是否存在其他更好/更清洁的解决方案

需要([
“dijit/form/Select”,
“dojo/_基座/窗口”,
“dojo/domReady!”
],功能(选择,赢){
变量选择=新选择({
名称:'select2',
选项:[{
标签:“瑞典汽车”,
值:“”,
小组:对,,
残疾人士:对
}, {
标签:“沃尔沃”,
价值:“沃尔沃”
}, {
标签:“萨博”,
价值:'萨博',
所选:真
}, {
标签:“德国汽车”,
值:“”,
小组:对,,
残疾人士:对
}, {
标签:“梅赛德斯”,
价值:“梅赛德斯”
}, {
标签:“奥迪”,
价值:“奥迪”
}]
},“选择”);
选择.on('change',函数(值){
警报(值);
});
选择.dropDown.\u onUpArrow=function(){
this.dropDown.focusPrev()
}.绑定(选择);
选择.dropDown.\u onDownArrow=函数(){
this.dropDown.focusNext()
}.绑定(选择);
select.dropDown.focusNext=函数(){
var next=this.dropDown.\u getNextFocusableChild(this.dropDown.focusedChild,1);
var nextSuccessive;
var nextFinal;
if(next.option.group){
var next=this.dropDown.\u getNextFocusableChild(this.dropDown.focusedChild,1);
this.dropDown.focusChild(下一个);
nextSuccessive=this.dropDown.\u获取nextfocusablechild(this.dropDown.focusedChild,1);
nextFinal=nextSuccessive;
}否则{
nextFinal=next;
}
this.dropDown.focusChild(nextFinal);
}.绑定(选择);
select.dropDown.focusPrev=函数(){
var prev=this.dropDown.\u getnextfocussablechild(this.dropDown.focusedChild,-1);
风险价值;
var prevFinal;
if(上一选项组){
var prev=this.dropDown.\u getnextfocussablechild(this.dropDown.focusedChild,-1);
this.dropDown.focusChild(上一个);
PrevSequenced=this.dropDown.\u获取下一个焦点为blechild(this.dropDown.focusedChild,-1);
prevFinal=PrevSequenced;
}否则{
prevFinal=prev;
}
this.dropDown.focusChild(prevFinal,true);
}.绑定(选择);
select.dropDown.onItemHover=函数(/*MenuItem*/item){
if(item.option.group){
项目设置(“悬停”,错误);
log(“跳过悬停”);
返回;
}
如果(此项已激活){
此.设置(“选定”,项目);
if(item.popup&&!item.disabled&&!this.hover\u计时器){
this.hover\u timer=this.defer(函数(){
此.\u openItemPopup(项目);
},此为.popupDelay);
}
}else if(this.delay<无穷大){
if(这个被动悬停计时器){
这个.passive_hover_timer.remove();
}
this.passive\u hover\u timer=this.defer(函数(){
本条第(项{
键入:“单击”
});
},这是被动的(延迟);
}
此项。_hoveredChild=项;
项目。_设置(“悬停”,真);
}.bind(选择.下拉菜单);
选择.dropDown.\u onItemFocus=function(/*MenuItem*/item){
if(item.option.group){
返回;
}
if(this.\u hoveredChild&&this.\u hoveredChild!=项目){
this.hover(this.\u hoveredChild);
}
此.设置(“选定”,项目);
}.bind(选择.下拉菜单);
});

window.dojoConfig={
parseOnLoad:false,
异步:true
};

我记得以前见过这样做,你是说这样吗@erotavlas感谢您的链接,有趣的是,目前我发现了一个临时解决方案athttps://jsfiddle.net/gibbok/u3ux0uxk/ 使用dijit.form.FilteringSelect对您的解决方案感兴趣