Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.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 将两个SelectBox值绑定到单个淘汰日期属性_Javascript_Html_Binding_Knockout.js - Fatal编程技术网

Javascript 将两个SelectBox值绑定到单个淘汰日期属性

Javascript 将两个SelectBox值绑定到单个淘汰日期属性,javascript,html,binding,knockout.js,Javascript,Html,Binding,Knockout.js,我有一个knockout对象,它包含一个名为的属性created。time Date的此属性包含事件的日期。在html表单中,我有两个selectbox输入:第一个是小时,第二个是分钟。这些允许用户选择时间,然后应在created属性上设置所选值。以下是我表格的代码示例: <form action="..." method="..."> <select name="hours"> <option value="8">8</opti

我有一个knockout对象,它包含一个名为的属性created。time Date的此属性包含事件的日期。在html表单中,我有两个selectbox输入:第一个是小时,第二个是分钟。这些允许用户选择时间,然后应在created属性上设置所选值。以下是我表格的代码示例:

<form action="..." method="...">
    <select name="hours">
        <option value="8">8</option>
        <option value="9">9</option>
        ...
        <option value="22">22</option>
    </select>
    <select name="minutes">
        <option value="0">0</option>
        ...
        <option value="30">30</option>
    </select>

    ...
</form>

8.
9
...
22
0
...
30
...

这是一个非常简单的表单,但是我不明白如何将输入绑定到创建的值,并只更新属于每个输入的日期部分。基本上,当我选择第一个输入的选项时,我应该更新日期的小时数,当我选择第二个输入的选项时,日期的分钟数应该更新。

我会通过在混合中添加a来实现这一点,并将所选的分钟数和小时数存储在它们的组成部分中

这里有一个稍微做作的例子,但显示了一般原则。此处计算的时间只是将每分钟小时的部分连接在一起,但您可能会实例化一个日期对象来执行您需要执行的操作:

function TimeModel(options) {
    var self = this;

    self.hourOptions = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
    self.minuteOptions = [0, 15, 30, 45];

    self.selectedHour = ko.observable(options.hour || 0);
    self.selectedMinute = ko.observable(options.minute || 0);

    self.selectedDate = ko.computed(function() {
        return self.selectedHour() + ":" + self.selectedMinute();
    });
}
然后,我会将
hourOptions
minuteOptions
绑定到相应的选择框中,所有选项都应该是好的:)


检查这把小提琴是否有有效的解决方案:

我会在混合物中加入a,并将选定的分钟和小时储存在它们的组成部分中

这里有一个稍微做作的例子,但显示了一般原则。此处计算的时间只是将每分钟小时的部分连接在一起,但您可能会实例化一个日期对象来执行您需要执行的操作:

function TimeModel(options) {
    var self = this;

    self.hourOptions = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
    self.minuteOptions = [0, 15, 30, 45];

    self.selectedHour = ko.observable(options.hour || 0);
    self.selectedMinute = ko.observable(options.minute || 0);

    self.selectedDate = ko.computed(function() {
        return self.selectedHour() + ":" + self.selectedMinute();
    });
}
然后,我会将
hourOptions
minuteOptions
绑定到相应的选择框中,所有选项都应该是好的:)


检查此提琴以获得有效的解决方案:

我喜欢您的解决方案,但正如问题中所述,我已经找到了一个存储日期的属性,并且必须在其上设置小时/分钟。我想我可以以某种方式将一个可观察对象绑定到Date对象的setter方法。因此,我应该将选择框的值设置为时间值,然后反映对该属性的任何更改。如果您可以编写一个JSFIDLE,您就更有可能得到准确的答案,因为人们不必从纯文本中提取需求,这是他们可以看到的。编辑:另外,我认为您应该扩展我上面概述的方法,单独存储日期的每一部分,并在每次日期的某一部分发生变化时使用计算出的日期来计算一个全新的日期(每次调用
setMinutes
等而不是新创建
date
没有实际区别)这与我的一个应用程序(包括0、15、30、45)中的代码几乎相同。当selectedDate激发时,更新要发送回服务器的实际日期字段。但我不确定如何输入日期,除了您概述的时间部分。总是创造一把小提琴,它使一切变得容易得多。那么,假设一下日期是如何输入的,那么这个呢:正如我在最初的回答中所说的,这是一个简单的模式的延续。我喜欢你的解决方案,但正如问题中所写的,我已经找到了一个存储日期的属性,我必须在上面设置小时/分钟。我想我可以以某种方式将一个可观察对象绑定到Date对象的setter方法。因此,我应该将选择框的值设置为时间值,然后反映对该属性的任何更改。如果您可以编写一个JSFIDLE,您就更有可能得到准确的答案,因为人们不必从纯文本中提取需求,这是他们可以看到的。编辑:另外,我认为您应该扩展我上面概述的方法,单独存储日期的每一部分,并在每次日期的某一部分发生变化时使用计算出的日期来计算一个全新的日期(每次调用
setMinutes
等而不是新创建
date
没有实际区别)这与我的一个应用程序(包括0、15、30、45)中的代码几乎相同。当selectedDate激发时,更新要发送回服务器的实际日期字段。但我不确定如何输入日期,除了您概述的时间部分。总是创造一把小提琴,它使一切变得容易得多。那么,假设一下日期可能是如何输入的,那么这个呢:正如我说的,这是我原始答案中模式的简单延续