3

我正在使用 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
}

for 的行div.innerHTML = "5"有“期望动态类型的值”的错误,但div.innerHTML = textarea.value从来没有错误。

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

4

2 回答 2

3

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

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

textarea.onchange = {
    div.innerHTML = "5"
    Unit
}
于 2020-03-25T12:02:14.467 回答
2

原来我错误地设置了事件处理程序。而不是分配给.onchange =,您可以改为使用:

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

关于我以前的代码的某些内容创建了一个不接受分配代码的闭包。

于 2018-10-08T10:58:18.000 回答