事件处理程序无法正常工作

时间:2011-09-05 23:11:50

标签: opa

所以我有以下代码用于创建表单,当您单击某个字段时,它确保数据库中的最新数据位于该字段中,然后当您离开表单字段时,它会保存文本区域回到数据库。 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 个答案:

答案 0 :(得分:2)

我已经使用与您类似的代码进行了测试,似乎因为您的ID不正确而未触发onclick,onblur,您必须删除#这样的字符:

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

但是,如果你想使用#,你应该这样做:

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

你注意到了区别吗?

答案 1 :(得分: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)

N.B:将onclick放在div上是没有问题的,但我想保持简单