在IE8上按Tab键后禁用dojo onkeyup

wkftcu5l  于 2022-12-16  发布在  Dojo
关注(0)|答案(1)|浏览(185)

在Websphere Portal Server上运行的Spring应用程序上使用dojo工具包1.4.3(不能使用任何其他版本)时,我遇到了IE8上的事件问题(可怕!)。
现在,我不相信后端与此有任何关系,因为IE8标签的问题是众所周知的:
按下网页的任何字段并一直按Tab键,焦点会返回到url输入和按钮,重复后不会返回到文档,如果您单击网站中的某个元素,它会重新将焦点添加到该元素,但当您再次按Tab键时,它会返回到浏览器的顶部。
现在,我的问题发生在一路跳表并将焦点从文档中移走之后。看起来浏览器正在从DOM中删除事件,我已经在IE8上调试了代码,它似乎没有触发回调函数,而当不执行整个跳表操作时,它的行为正常。
我尝试过使用dojo.disconnect()并通过随后调用dojo.connect()来重新添加事件,但没有效果,下面是一个小片段:

var connectedObjects = {};
dojo.query(".someClass").forEach(function(inputField){
   connectedObjects[inputField.id] = {}; 
   connectedObjects[inputField.id].onfocus = dojo.connect(inputField, "onfocus", function(event){
       if(connectedObjects[inputField.id]){
           dojo.disconnect(connectedObjects[inputField.id].onkeyup);
           connectedObjects[inputField.id].onkeyup = dojo.connect(inputField, "onkeyup", someCallbackFunction);
       }
   })
});

有人知道怎么解决这个问题吗?

368yc8dk

368yc8dk1#

所以,这是一个奇怪的问题,但有一个简单的方法来解决这个问题,这似乎也解决了其他浏览器从循环通过隐藏的输入字段有css属性display:none,等等代码:

dojo.query("*").forEach(function(fieldID){
    dojo.attr(fieldID, "tabIndex", "-1");
});

相关问题