2011-06-12 59 views
1

我讀過多次,這是建議的方法時提交表單時,將客戶端回調,但它不工作對我來說:表格觀察提交不工作?

<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> 

有人能指出我做了什麼錯?

我用掛毯5.1.0.5

回答

2

有在5.1.0.5一個有趣的缺陷(固定或更新版本)

,只有一個簡單的頁面不會造成任何核心 掛毯要加載的JavaScript庫(tapestry.js,prototype.js等)因此,表單甚至不支持提交。將驗證添加到表單中的字段可以解決此問題,但是如果您沒有難以處理的字段。

如果你甚至沒有在頁面中加載tapestry.js,那麼第一步是確保你正在做的事情會告訴你想要的框架。一種方法是調用RenderSupport#addScript。傳遞一個空字符串會被忽略,所以你可以在其中插入一個分號來實質上得到一個空操作。

@Inject 
private RenderSupport renderSupport; 

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

接下來要做的事情會打電話給你getFormEventManager表單元素上初始化掛毯的形式,並確保該事件處理程序連接。

我也更新了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> 

討厭的,而是固定在框架的更高版本。