Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.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/4/maven/5.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_Knockout.js - Fatal编程技术网

Javascript 敲除值绑定在输入类型上的奇怪行为

Javascript 敲除值绑定在输入类型上的奇怪行为,javascript,knockout.js,Javascript,Knockout.js,我在KOforeach中有两个同级输入: <input type="text" name="background_color" data-bind="value: $data.background_color"> <input type="hidden" name="background_color" data-bind="value: $data.background_color"> 但这很痛苦。为什么只为输入[type=“hidden”]设置该值 使用KO v3

我在KO
foreach
中有两个同级输入:

<input type="text" name="background_color"  data-bind="value: $data.background_color">
<input type="hidden" name="background_color"  data-bind="value: $data.background_color">
但这很痛苦。为什么只为
输入[type=“hidden”]
设置该值

使用KO v3.3.0。

文本输入的当前值在元素/属性级别根本不会反映在DOM中,因此
innerHTML
或jQuery的
html()
不会看到它

下面是解决方案,但首先让我们看看
value
的行为,以及为什么
type=“text”
type=“hidden”
不同

属性与
属性
value
属性不是文本输入的值,而是文本输入的默认值。设置文本输入的值不会设置属性。相比之下,隐藏输入在“默认值”和“当前值”之间进行区分是没有意义的,因此设置
value
属性会设置属性,因此您可以在生成的HTML中看到该属性

value
的这种行为与KO无关,它只发生在原始DOM操作中:

document.getElementById(“文本字段”).value=“文本字段值”;
document.getElementById(“隐藏字段”).value=“隐藏字段值”


如果我选中了隐藏的值,文本值也不会从元素上设置的属性中删除,那么所需的值是否实际显示在文本框中?如果值是在生成的dom中设置的,则不会显示该值(我在chrome element inspector中粘贴了元素的副本)价值将是displayed@T.J.Crowder感谢您的证明,我应该提到dom是深嵌套的,可能与that@johnSmith,没有理由
值:…
无法正常工作。尝试创建一个能够模拟核心问题的Fiddle。非常好的解释,它向我指出了我的问题,实际上,如果我用jquery的.html()复制内容并粘贴到其他地方,只有在设置了value属性的情况下,才会直观地显示的值,thx我会将其标记为答案,因为这是一个非常好的答案,不幸的是,我不得不继续我的血腥生活fix@johnSmith:这是我的荣幸,我学到了一些东西(我不知道在隐藏输入上设置
属性设置它们的属性,直到我看到你的问题并尝试了它,这让我开始深入研究规范)。出于好奇,我回来检查这个问题。虽然我最初认为OP使用击倒的方式可能有问题,但结果证明它确实很有趣,我也学到了一些新的东西。
<input type="text" name="background_color" data-bind="value: $data.background_color">
<input type="hidden" name="background_color" data-bind="value: $data.background_color" value="#c9311b">
data-bind="attr: {'value':$data.background_color}"