Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用“选择”下拉列表中的“删除”设置更改事件_Javascript_Html_Knockout.js_Dom Events - Fatal编程技术网

Javascript 使用“选择”下拉列表中的“删除”设置更改事件

Javascript 使用“选择”下拉列表中的“删除”设置更改事件,javascript,html,knockout.js,dom-events,Javascript,Html,Knockout.js,Dom Events,我有一个下拉菜单,工作很好: <select class="picker-select" data-bind="options: searchOptions, select:{}, optionsText: 'name', optionsValue: 'id', value: selectedSearchOption" ></select> 型号: function actionWhenChange(event) { console.log("doing stuff

我有一个下拉菜单,工作很好:

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

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

function actionWhenChange(event) {
  console.log("doing stuff");
};
self.actionWhenChange = function (event) {
  console.log("doing stuff");
}
未捕获(承诺中)引用错误:未定义更改时的操作


和(也尝试不带括号)

型号:

function actionWhenChange(event) {
  console.log("doing stuff");
};
self.actionWhenChange = function (event) {
  console.log("doing stuff");
}
但我没有错


有什么想法吗?

嗯,终于知道发生了什么:)

第一个解决方案不起作用,因为在模型中找不到函数。这就是未定义错误的原因

关于第二个选项,knockout处理DOM事件,
onchange
不是可以找到的DOM事件之一

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

data-bind="event: { change: actionWhenChange }, ... more bindings
但是 解决这一问题的正确方法如下所述:使用subscribe to value observable in The model(以这种方式订阅模型内部的可观察值):

self.selectedSearchOption.subscribe(self.actionWhenChange) – 

希望这能帮助将来的人:)

看看。问题的表述不同,但答案是相同的。例如:在您的模型中,您编写:
self.selectedSearchOption.subscribe(self.actionWhenChange)
@user3297291我已使用正确的dom事件修复了它。。。但我也会尝试订阅,看看它是如何工作的,非常感谢
:)
,虽然很高兴你能分享你的解决方案,但请看看我在评论中链接的答案。订阅DOM的
change
事件是敲除中的反模式。改为订阅可观察的。另外,在将方法传递给事件绑定时不应调用该方法:
event:{change:actionWhenChange}
是正确的语法。感谢您的澄清,我正在尝试订阅选项,一个问题。。。。为什么使用变更事件是一种反模式??当使用淘汰时,您只关心您的视图模型。将viewmodel中的值与DOM同步是knockout的工作,通过数据绑定实现。事件绑定仅用于对用户输入作出反应。如果要对更改做出反应,则可以在视图模型中听取更改,而不必关心它们来自何处。这样,如果值以任何方式发生更改,您就可以确保始终调用您的操作。@user3297291 subscribe不仅工作正常,而且更加优雅和可读。我已经编辑了我的答案,但是如果你想让我接受的话,请随意发布一个新的答案。再次感谢
:)