我不确定这是否可行。我有一个使用javascript和css构建的UI,界面用户使用按键进行导航。 Css表示每个客户端更改的布局,如“皮肤”。 Javascript控制功能并监视用户按键。
设置有2个菜单,一个较低,一个较高。当你加载它时,较低的一个被聚焦,你可以使用左或右箭头在菜单项之间。
在正常情况下,您可以按“向上”以获得上方菜单,但是这个客户端根本不需要此菜单。
问题是我们不能简单地编辑javascript来阻止它,因为所有客户端使用相同的javascript,只根据选择的客户端加载不同的css。
所以现在我隐藏了上层菜单,但问题是javascript仍然允许你按下,但现在由于顶层菜单不存在,你失去了焦点,没有任何突出显示。最终用户不知道为什么或如何在他们意外按下时失去焦点。 (因为他们知道顶级菜单没有不同的设置,他们没有意识到他们应该按下,他们只是知道当他们按左/右时似乎没有发生)
我想做的是,在某种程度上,在css中,阻止用户按下。因为我们不能只是改变javascript。
这可能吗?或者是我修改javascript的唯一解决方案?
TIA !!
感谢所有提供建议的人,为了澄清,我们将制作一个新版本,其中包含检查客户是否需要此菜单的功能,如果没有,则禁用向上按钮,但这需要新版本的软件,以及完整的质量保证。只是试图在同一时间快速破解这个客户..:)
我们的最终解决方案在数据库中会有一个布尔字段,如果是,则javascript将忽略up键,如果为false,则表示正常。
答案 0 :(得分:2)
更改代码,使其仅在元素不存在时才按上箭头键操作。
EG为p
添加class="noupkey"
,然后停止触发事件:
if($('.nokeyup').length === 0) {
//Do normal behaviour
}
答案 1 :(得分:1)
不幸的是,没有正确的方法可以通过css禁用组件,因为这种类型的功能适用于javascript。
我与之合作的大多数程序员的理念是,您应该允许最终用户决定是否要使用新功能。
我的意思是,你应该在应用程序中留一个让人自己禁用组件的选项。这样,您可以为所有用户使用相同的javascript集,并仍然以正确的方式禁用任何组件。这样做的真正优势在于您不必再次处理此票证,支持人员可以通过重新创建所请求功能的操作简单地向任何客户提供服务。
但是,大多数此解决方案可能对您无法使用。我知道改变你的工作场所惯例并不容易。
这可能会更有用,How do I disable form fields using CSS?有些建议可能适用于任何组件,包括菜单。
答案 2 :(得分:0)
实际上这是一个非常奇怪的解决方案,但它可以通过一些棘手的解决方案来完成。
使用更多z-index制作一个透明Div,在主体级别上的绝对位置超过该向上按钮,对于其余应用程序,将指针事件Css属性应用于无,以便鼠标事件将在Below Div上完成。 / p>
然后,对于你想要禁用该控件的Case,不要将Pointer Events指向最前面的div,它将被禁用鼠标事件。
注意:IE中的指针事件存在一些问题。