使用Knockout将更改事件设置为选择下拉列表

时间:2018-04-04 12:43:04

标签: javascript html knockout.js dom-events

我的下拉工作很好:

<select class="picker-select" data-bind="options: searchOptions, select:{}, optionsText: 'name', optionsValue: 'id', value: selectedSearchOption" ></select>

现在我想在选择更改时执行一个函数,但它似乎不起作用。

我尝试过的事情:

onchange event

onchange="actionWhenChange()"   // also tried without parenthesys

MODEL:

function actionWhenChange(event) {
  console.log("doing stuff");
};

错误:

  

未捕获(在promise中)ReferenceError:actionWhenChange未定义

使用knockout event binding(也没有使用parenthesys进行尝试)

data-bind="event: { onchange: actionWhenChange() }, ... more bindings

MODEL:

self.actionWhenChange = function (event) {
  console.log("doing stuff");
}

但我没有错误。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

好吧,终于发现了发生了什么:)

第一个解决方案无法正常工作,因为无法找到该功能,因为它在模型中。这就是未定义错误的原因。

关于第二个选项,event binding,淘汰赛正在处理DOM事件,onchange不是可以找到的here之一的DOM事件。

所以解决方案就是从onchange中删除on并使用change事件:

data-bind="event: { change: actionWhenChange }, ... more bindings

BUT

解决这个问题的正确方法是user3297291所述:用这种方式在模型中使用subscribe来定义值observable:

self.selectedSearchOption.subscribe(self.actionWhenChange) – 

希望这可以帮助处于未来的人:)