Не работают обработчики событий

Итак, у меня есть следующий код, который я использую для создания формы, которая, когда вы щелкаете в поле, гарантирует, что самые последние данные из базы данных находятся в поле, а затем, когда вы покидаете поле формы, он сохраняет текстовую область обратно в базу данных. В форме функции 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>
      )
)

opa
person Chris    schedule 05.09.2011    source источник


Ответы (2)


Я протестировал код, аналогичный вашему, и кажется, что onclick, onblur не запускаются, потому что ваши идентификаторы неверны, вы должны удалить символы # следующим образом:

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

Однако, если вы хотите использовать #, вы должны сделать:

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

Вы замечаете разницу?

person Fred    schedule 06.09.2011
comment
Я вижу разницу. Действительно, удаление # из значения textid и divid работает. Любые идеи, почему это работает именно так? - person Chris; 06.09.2011
comment
Я не знаю, это Opa или веб-браузер, который игнорирует обработчик событий (требует расследования) - person Fred; 07.09.2011

Это минимальный код, показывающий, как использовать 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 на div, но я хотел, чтобы это было просто

person Fred    schedule 06.09.2011