表格观察提交不起作用?

时间:2011-06-12 22:10:15

标签: tapestry

我多次阅读过这是在提交表单时添加客户端回调的推荐方法,但它对我不起作用:

<t:form t:id="myForm" id="myForm">
    <t:submit />
</t:form>

<script type="text/javascript">
    $("myForm").observe(Tapestry.FORM_PREPARE_FOR_SUBMIT_EVENT, function() {
        alert("submitting");
    });
    alert("listening");
</script>

有人可以指出我做错了吗?

我正在使用tapestry 5.1.0.5

1 个答案:

答案 0 :(得分:2)

5.1.0.5中存在一个有趣的缺陷(在较新版本中修复)

一个简单的页面只会导致任何核心 tapestry javascript库加载(tapestry.js,prototype.js等)所以表单甚至没有挂钩onSubmit。将验证添加到表单中的字段可以解决这个问题,但是如果你没有一个很难的字段。

如果您甚至没有在页面中加载tapestry.js,那么第一步是确保您正在做一些能够告诉您想要它的框架。一种方法是调用RenderSupport#addScript。传递空字符串会被忽略,因此您可以在其中粘贴一个分号,从根本上获得无操作。

@Inject
private RenderSupport renderSupport;

void setupRender() {
    // non-blank addScript causes stack to get added
    renderSupport.addScript(";");
}

接下来要做的是在表单元素上调用getFormEventManager来初始化tapestry的表单,并确保附加事件处理程序。

我还更新了TML以等待dom加载,这样你就不会出现奇怪的时序错误:

<t:form t:id="myForm">
   <t:submit/>
</t:form>

<script type="text/javascript">
    Tapestry.onDOMLoaded(function() {
    $('myForm').getFormEventManager(); // forces the form to start listening for submits
    $("myForm").observe(Tapestry.FORM_PREPARE_FOR_SUBMIT_EVENT, function() {
       alert("submitting");
    });
    alert("Dom loaded");
  });
</script>

令人讨厌,但在框架的更高版本中已修复。