Kotlin Javascript:在事件处理程序中分配给元素属性将给出“期望值为动态类型”

时间:2018-10-07 04:27:03

标签: html kotlin kotlin-js

我正在使用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"的行有一个“期望为动态类型的值”的错误,但是div.innerHTML = textarea.value从来没有错误。

为什么即使事件处理程序外的同一行代码都不会给出错误,也为什么在onchange处理程序中获得“动态类型的预期值”?

2 个答案:

答案 0 :(得分:2)

为了更清楚一点,这里的问题是: .onchange(或任何其他事件方法)期望以{(Event)->dynamic}?作为参数。

因此,如果您插入lambda,则将最后一行用作返回值。将您的代码更改为以下内容也可以:

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

答案 1 :(得分:1)

事实证明我没有正确设置事件处理程序。除了分配给.onchange =之外,您还可以使用:

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

关于我之前的代码,创建了一个不接受分配代码的闭包。