2011-10-09 154 views
3

在Opa中,如何在提交表單時阻止頁面重新加載?當按下提交時,我想執行一些客戶端驗證,並且只有在驗證通過時才提交表單。Opa:在提交表單時阻止頁面重新加載

我用這種形式的工作:

<form onready={_ -> ready()} id=#form_id> 
    <input type="submit" value="Submit" /> 
</form> 

此功能成功地記錄其上提交的消息,但仍然重新加載頁面:

ready() : void = 
    do ignore(Dom.bind(#form_id, {submit}, (_ -> Log.notice("submit","submitted")))) 

此功能無法登錄的消息,並重新加載頁:

ready() : void = 
    do ignore(Dom.bind_with_options(#form_id, {submit}, (_ -> Log.notice("submit","submitted")), [{prevent_default}])) 

我使用WFormBuilder,因爲我需要避免對錶單的html和驗證錯誤信息進行了細粒度的控制(當我嘗試使用它時,似乎並不是WFormBuilder中的一個選項)。

感謝您的幫助。

回答

3

WFormBuilderthe source,我發現它的HTML表單這個屬性:options:onsubmit="prevent_default"

所以片段中的行爲我一直在尋找:

<form onready={_ -> ready()} id=#form_id options:onsubmit="prevent_default"> 
    <input type="submit" value="Submit" /> 
</form> 

ready() : void = 
    do ignore(Dom.bind(#form_id, {submit}, (_ -> Log.notice("submit","submitted")))) 
+0

我仍然不能確定爲什麼是這樣的方式OPA處理這個。有沒有人對「options」屬性和「prevent_default」值的用途有所瞭解?它似乎有非常[有限的文檔](http://doc.opalang.org/index.html#_syntax_extensions)。 – nrw

+0

'options:onsubmit'是onsubmit事件的事件處理程序的選項列表。在JS事件中,'prevent_default'與[returned false]具有相同的效果(http://stackoverflow.com/questions/1357118/javascript-event-preventdefault-vs-return-false)或者執行'e.preventDefault()'處理程序。技術上的原因是爲什麼不能在Opa中的事件處理程序本身做出這個決定(長話短說:事件處理程序可能是異步RPC調用)。簡而言之:我認爲你完美地回答了你的問題:) – akoprowski

+0

感謝澄清,亞當。 – nrw

相關問題