Используйте значение текстовой области с js_of_ocaml

Я пытаюсь использовать значение текстовой области с js_of_ocaml. Вот мой исходный код:

let matrix () =
  let text1 = get_textarea "input_1" in
  let btn1 = get_elem "btn_1" in
  text1##placeholder <- Js.string "Write your matrix !";
  btn1##textContent <- Js.some (Js.string "Calculate");
  btn1##onclick <- Dom_html.handler (if Matrix.is_matrix (Js.to_string text1##value) 
                                     then (let matrix = Matrix.get_matrix (Js.to_string text1##value) in
                                       fun ev -> (set_matrix_caracteristics (Matrix.nb_lines matrix) (Matrix.nb_columns matrix) (Matrix.determinant matrix) ; Js._false))
                                     else fun ev -> (error_input_matrix() ; Js._false))

Я хочу сделать несколько исчислений на матрице, и матрица записывается пользователем через текстовую область с html-интерфейсом.

Я думаю, что проблема в том, что ценность text1не меняйся, даже если я напишу что-нибудь в текстовой области. Каким бы ни был ввод текстовой области, результат будет одинаковым.

Кто-нибудь знает, как использовать значение, записанное пользователем?

Спасибо!

1 ответ

Решение

Ваша проблема здесь в том, что вы оцениваете text1##value перед определением функции обработчика, поэтому значение оценивается при установке обработчика, а затем никогда не изменяется. следующее должно работать

   btn1##onclick <- Dom_html.handler (
       fun ev -> 
                if Matrix.is_matrix (Js.to_string text1##value) 
                then let matrix = Matrix.get_matrix (Js.to_string text1##value) in
                                    (set_matrix_caracteristics (Matrix.nb_lines matrix) (Matrix.nb_columns matrix) (Matrix.determinant matrix) ; Js._false)
                else error_input_matrix() ; Js._false
      )
Другие вопросы по тегам