2

让我介绍一下设计。

JSP 中的每个字段都由Map. 标签名称、输入类型(下拉或其他)、输入值、默认值等被添加到Map.say中Map nameAttributes。还有另一个类,GeneralWriter writer我无权访问,它从 中获取值Map,解析它们并编写正确的 HTML 代码。

写完 Map 后,writer.writeSelectBox(nameAttributes);被调用。

现在,要求是:
有一个下拉菜单,根据其选择的值,其他一些下拉菜单被禁用(显示在 UI 中,但不可修改)或启用。因为,我没有为添加的字段编写 HTML 代码,所以我无法编写函数调用事件来完成我的工作。

我观察到一个 JS 函数在onMouseOut来自字段的事件上被调用,如"View Source". 所以我想我可能会在那里编写代码来检查字段值并影响其他下拉菜单。但是如果我写alert在 JS 函数中(只是为了检查),它不会提醒我,这意味着该函数没有被调用,我无法编写启用/禁用代码。

有什么办法可以完成工作。启用和禁用应取决于用户在其中一个下拉菜单中选择的内容。

示例代码:

<%
Map nameAttr = new HashMap();   
nameAttr.put(GeneralConst.INPUT_MESSAGE, Const.MSG_FIELD_NAME);
//.....

writer.writeAllSelectBox(nameAttr);
%>

急需帮助,谢谢。

4

1 回答 1

0

在 JSP 页面的 View Source 中,很明显为某些字段添加了 onChange 和 onMouseOut 事件等,并且在GeneralWriter类中,这些内容被写入到 out 流中,如下所示

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. 单击重置按钮,就会调用函数。

解决。

于 2013-04-02T10:10:23.333 回答