我多次阅读过这是在提交表单时添加客户端回调的推荐方法,但它对我不起作用:
<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
答案 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>
令人讨厌,但在框架的更高版本中已修复。