让我介绍一下设计。
JSP 中的每个字段都由Map
构成。
标签名称、输入类型(下拉或其他)、输入值、默认值等被添加到 Map
中,比如 Map nameAttributes
。
还有另一个类 GeneralWriter writer
,我无权访问它,它从 Map
获取值,解析它们并编写正确的 HTML 代码。
写完 map 后,调用writer.writeSelectBox(nameAttributes);
。
现在,要求是:
有一个下拉菜单,根据其选择的值,其他一些下拉菜单被禁用(显示在 UI 中,但不可修改)或启用。
因为我没有为添加的字段编写 HTML 代码,所以我无法编写函数调用事件来完成我的工作。
我观察到在字段中的 onMouseOut
事件上调用了一个 JS 函数,如 “View Source”
中所示。
所以我想我可能会在那里编写我的代码来检查字段值并影响其他下拉菜单。
但是如果我在JS函数中写alert
(只是为了检查),它不会提醒我,意味着函数没有被调用,我不能写启用/禁用代码。
有没有什么办法可以完成这项工作。启用和禁用应取决于用户在其中一个下拉菜单中的选择。
示例代码:
<%
Map nameAttr = new HashMap();
nameAttr.put(GeneralConst.INPUT_MESSAGE, Const.MSG_FIELD_NAME);
//.....
writer.writeAllSelectBox(nameAttr);
%>
急需帮助,谢谢。
最佳答案
在 JSP 页面的查看源代码中,很明显,对于某些字段添加了 onChange 和 onMouseOut 事件等,并且在 GeneralWriter
类中,这些东西被写到输出流中跟随
out.println("<td nowrap><select name=" + strName);
out.println(" style=\"width:" + strWidth + "px\"");
out.println(" onChange ="+onChange);
因此,我在那里添加了自己的方法而不是使用现有代码并引入了 onChange 事件。你看到的“onChange
”变量(右边那个)是java.lang.String
类型的,这必须从JSP本身传递,至于什么行为我想要或调用特定 JSP 的特定函数。
现在我在JSP中添加了以下内容
<body>
<script>
window.onload = setModeForPara2('MEMBERTYPE','MEMBERSTATE','CKSTATUS') ;
function resetevent(uri){
setModeForPara2('MEMBERTYPE','MEMBERSTATE','CKSTATUS') ;
}
</script>
</body>
其中参数是下拉菜单的名称,setModeForPara2()
是一个 JS 函数,用于禁用/启用,因为我的要求在原始帖子中有说明。它检查 MEMBERTYPE 是否为 0,然后将禁用状态和灰色渲染到 MEMBERSTATE 和 CKSTATUS 下拉菜单,否则启用它们并移除灰色。
resetevent(uri)
也是一个 JS 函数,在单击 Reset 按钮时调用,将禁用状态渲染到 State 和 Status 字段。
这样一来,setModeForPara2()
函数就会在以下任何时候被调用:
1.页面加载完毕,
2.第一个下拉框(MEMBERTYPE)的值发生变化,并且
3. 单击重置按钮。
已解决。
关于在只有 Java 代码的 JSP 文件中启用、禁用下拉菜单的 Javascript,直接没有 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15652513/