Kotlin Javascript: назначение свойства элемента внутри обработчика событий дает ожидаемое значение динамического типа

Я использую транспиляцию Kotlin для Javascript.

У меня есть эта функция для редактирования содержимого div при изменении текстовой области.

fun doStuff()
{
    val div = document.createElement("div") as HTMLDivElement
    val textarea = document.createElement("textarea") as HTMLTextAreaElement

    textarea.onchange = {
        div.innerHTML = "5"
    }
    div.innerHTML = textarea.value
}

Строка для div.innerHTML = "5" имеет ошибку "Ожидается значение типа dynamic", но div.innerHTML = textarea.value никогда не имеет ошибки.

Почему я получаю «Ожидаемое значение динамического типа» внутри обработчика onchange, хотя та же строка кода вне обработчика событий не выдаст ошибку?


person Halcyon    schedule 07.10.2018    source источник


Ответы (2)


Чтобы немного прояснить, в чем здесь проблема: .onchange (или любой другой метод обработки событий) ожидает {(Event)->dynamic}? в качестве аргумента.

поэтому, если вы вставите лямбду, ваша последняя строка будет использоваться как возвращаемое значение. Изменение вашего кода на следующее также будет работать:

textarea.onchange = {
    div.innerHTML = "5"
    Unit
}
person Nozo    schedule 25.03.2020

Оказывается, я неправильно устанавливал обработчик событий. Вместо назначения .onchange = вы можете вместо этого использовать:

textarea.addEventListener("keyup", {
    event : Event -> Unit 
    ... 
}

Что-то в моем предыдущем коде создало замыкание, которое не принимало код присваивания.

person Halcyon    schedule 08.10.2018
comment
Спасибо, что оставили ответ после того, как разобрались. Это помогло мне. - person Nosrac; 11.01.2019