代码之家  ›  专栏  ›  技术社区  ›  Matthew Farwell

JavaScript点击()与用户使用JSF按钮的行为差异

  •  1
  • Matthew Farwell  · 技术社区  · 16 年前

    我有一个表单,当用户单击按钮时,它会重定向到另一个页面,但是当我用javascript模拟单击时,重定向失败。tha ajax调用完全相同(javax.faces.viewstate除外,但结果不同。

    表单看起来像:

    <h:form id="form" onkeypress="trapEnter(event);">
        <h:outputText value="Number" />
        <h:inputText value="#{form.number}" />
    
        <a4j:commandButton id="act" value="Go" action="#{form.go}" />
    </h:form>
    

    javascript函数:

    function trapEnter(evt) {
      // cut out to save space
    
      if (keycode == 13) {
        document.getElementById('form:act').click()
        return false;
      } else {
        return true;
      }
    }
    

    当我在文本输入框中输入3并单击Go时,页面将按预期重定向到Form.Go返回的目标。

    当我在文本输入框中输入3并按Enter键时,Form.Go被正确调用,但页面没有重定向。

    在这两种情况下,Form.Go都被正确调用,并返回重定向的正确值。有人能告诉我为什么javascript click()不起作用吗?如果我做了完全错误的事情,请告诉我怎么做。

    我正在使用火狐3.5,如果这有什么区别的话。

    谢谢。

    3 回复  |  直到 16 年前
        1
  •  2
  •   BalusC    16 年前

    这个 a4j:commandButton 生成一个button元素,其中包含一组javascript以激发 天使般的 请求。但是,您的功能需求(“重定向页面”)可以用“普通”完成。 h:commandButton . 所以我会用它来代替。

    但是,您不需要从按键返回“真”或“假”。重写函数如下:

    function trapEnter(event) {
        if (event.keyCode == 13) document.getElementById('form:act').click();
    }
    

    仅此而已(是的,检测Enter键与浏览器无关)。

        2
  •  0
  •   Artsiom Anisimau    16 年前

    返回false;防止重定向。

        3
  •  0
  •   Matthew Farwell    16 年前

    我从来都不知道为什么这不起作用。据我所知,它仍然不起作用。

    但是,在问了 JBoss community forum 在RichFaces中有一种不同的方法来实现这一点:

    <rich:hotKey selector="#form" key="return" handler="document.getElementById('form:act').click();"/>
    

    这包含在它适用的页面中。这是可行的。

    推荐文章