2011-09-05 109 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