Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.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 knockout js订阅select list selected选项时重复显示未定义_Javascript_Knockout.js - Fatal编程技术网

Javascript knockout js订阅select list selected选项时重复显示未定义

Javascript knockout js订阅select list selected选项时重复显示未定义,javascript,knockout.js,Javascript,Knockout.js,我有一个预先填充了字符串列表的下拉列表。我的选择列表绑定如下所示: <select id="industryDropDown" data-bind="options: $root.orgIndustrySuggestions, value: $root.selectedIndustryTag, optionsCaption: ''"></select> 我试图从下拉列表中获取所选值,在alert()现在所在的位置执行某些操作,然后将所选值重置为默认的空字符串选项

我有一个预先填充了字符串列表的下拉列表。我的选择列表绑定如下所示:

<select id="industryDropDown"
    data-bind="options: $root.orgIndustrySuggestions, value: $root.selectedIndustryTag, optionsCaption: ''"></select>
我试图从下拉列表中获取所选值,在alert()现在所在的位置执行某些操作,然后将所选值重置为默认的空字符串选项


目前,当我运行此程序时,页面加载是正常的。但当我选择某个东西时,它会在第一次向我显示所选的值,但他们会抛出一个kajillion(我计算过)警报,然后说“未定义”

你的逻辑过于复杂了。创建一个fiddle来演示您的错误,我们可能会告诉您原因,但简而言之,您有一个递归循环(您订阅了一个值并在该函数中设置了它),并且在不需要-

self.selectedIndustryTag.subscribe(function (newValue) {
    if (newValue) {
        alert(self.selectedIndustryTag());
         // The next line will refire the subscription
         //self.selectedIndustryTag('');
    }
}, self);
条件语句-if(newValue)将测试newValue是否等于null、未定义、false或string empty(“”)

这就是一个kajillion吗?还是更像是10亿美元

你有这个问题的原因是你进入了一个无止境的循环。在UI中更改
selectedIndustryTag
,将引发订阅。在订阅中,您可以更改
selectedIndustryTag
,这将引发订阅,从而更改
selectedIndustryTag
这。。。。你可能明白了

解决此问题的方法是使用两个属性。用户界面编辑的实时版本,您可以订阅,第二个版本内部使用(订阅可以更新)

另一个问题是,您正在使用严格的非相等运算符
==但与字符串比较
“未定义”
。这将永远不会进行评估,因为您应该将其与
未定义的
(不带引号)进行比较

所以改变

if (newValue !== 'undefined')


活生生的例子:

你能创建一个JSFIDLE吗?我从来都不擅长小提琴。fiddle:(虽然我没有看到kazillion弹出窗口-只有3)哇。。这很尴尬。如果
newValue
是错误的,那么这完全改变了OP的功能。不,它没有-OP清楚地表明该值是一个复杂的对象。谢谢你偷了我的答案并投了反对票。是的,我是个白痴。这很有道理。谢谢@davidisawesome-请参阅更新。在我的答案中发现了一些其他的东西(首先我可以添加),你不需要测试它是否是未定义的、空的、空的等等。。。只需测试if(newValue)。
if (newValue !== 'undefined')
if (newValue !== undefined)