2011-09-05 113 views
2

所以我用下面的代碼創建一個表單,當你點擊一個字段時,它確保來自數據庫的最新數據在字段中,然後當你離開表單字段時它將文本區域保存回數據庫。在display()函數中有很多其他字段已經在工作。然而,這是我使用的第一個數據庫字段,它是一個列表(字符串),所以我試圖找出如何處理這些。當我運行這個HTML時,看起來都是正確的,我甚至可以看到這些字段的事件。但是,使用display_lp生成的字段不會觸發onclick或onblur事件。爲什麼有這個原因?事件處理程序不能正常工作

display_lp(path) = (
    List.mapi(
    x, characterlp ->  textid = "#edit_content_lp_{x}" 
    divid = "#show_content_lp_{x}" 
    <div class="show_content" id={divid} onclick={_ -> edit_lp(path, x) }> 
     {x+1}: 
     <textarea class="edit_content" id={textid} cols="20" rows="1" onblur={_ -> save_lp(path,x) } > 
      {characterlp} 
     </textarea> 
    </div> 
    , /characters[path]/lifepaths) 
) 

display(path) = (
    Resource.styled_page("{path}'s character sheet",["/resources/css.css"], 
       /* a bunch of other irrelevant html *? 
      <div class="show_content" id=#show_content_lp> Lifepaths: { display_lp(path) } 
      </div> 
      <a href="..">Back to Directory</a> 
    ) 
) 

回答

2

我與你類似的代碼進行測試,它似乎是的onclick,的onblur是未被觸發,因爲你的ID是不正確,則必須刪除#文字是這樣的:但是

textid = "edit_content_lp_{x}" 
    divid = "show_content_lp_{x}" 

,如果你想使用#,你應該做的:

my_id_var = "some_text_{nb}" 
<div id=#{my_id_var}>...</div> 

你注意到了區別?

+0

我看到了區別。確實從textid和divid的值中刪除了#。任何想法爲什麼這樣工作? – Chris

+0

我不知道這是否是Opa或忽略事件處理程序的Web瀏覽器(要調查) – Fred

0

這是一個最小的代碼,展示瞭如何在textarea上使用onclick,onblur。

do_click(_event) = 
    jlog("CLICK: {Dom.get_value(#tt)}") 

do_blur(_event) = 
    jlog("BLUR: {Dom.get_value(#tt)}" 

main() = 
    <textarea id=#tt 
      onclick={do_click} 
      onblur={do_blur)}>Hello</textarea> 

server = Server.one_page_bundle("OpaTest", [], [], main) 

NB:沒有問題放的onclick上的股利,但我想保持它的簡單

+0

使用jlog只用於調試;) – Fred