Javascript 使用knockout按名称获取元素

Javascript 使用knockout按名称获取元素,javascript,knockout.js,Javascript,Knockout.js,我正在创建如下输入元素: <input type="text" class="form-control" data-bind="value: attr: { name: Data[' + $index() + ']'}" /> 在上面的按钮上,单击我想要获得所有输入的值。在JS中,我可以按名称完成元素,它会给我那个元素。但是我怎样才能让它在这里工作呢 更新代码: 我的HTML中有以下内容: <div data-bind="foreach: { data: myData

我正在创建如下输入元素:

<input type="text" class="form-control" data-bind="value: attr: { name: Data[' + $index() + ']'}" />
在上面的按钮上,单击我想要获得所有输入的值。在JS中,我可以按名称完成元素,它会给我那个元素。但是我怎样才能让它在这里工作呢

更新代码:

我的HTML中有以下内容:

    <div data-bind="foreach: { data: myData }">
        <div class="form">
            <div class="myClass">
                <input type="text" class="form-control" data-bind="value: $data.textbox, attr: { name: 'MyData[' + $index() + '].Textbox'}" />
            </div>    
            <div class="myClass">                    
                <input type="button" value="Add More" class="btn btn-primary" data-bind="click: $parent.add"/>
            </div>              
        </div>
    </div>

很可能你的整个方法都是错误的

  • 您的HTML输入元素不需要名称
  • viewmodel方法不需要了解显示其值的HTML元素的任何信息
  • 您不需要使用特殊参数绑定事件处理程序
视图(HTML页面)用作修改viewmodel的工具。您需要验证的所有数据都在viewmodel中,因为您已经使用户可以更改的所有内容都可以观察到

功能测试(){
var self=这个;
self.users=ko.array([
{名称:ko.observable(“John Doe”)},
{名称:ko.observable(“Jane Doe”)}
]);
self.verify=函数(){
var usernames=self.users().map(函数(u){return ko.unwrap(u.name)});
警报('您已输入这些用户\n\n'+用户名。加入('\n'));
};
}
var vm=新测试();
ko.应用绑定(vm)



检查数据
您的整个方法极有可能是错误的

  • 您的HTML输入元素不需要名称
  • viewmodel方法不需要了解显示其值的HTML元素的任何信息
  • 您不需要使用特殊参数绑定事件处理程序
视图(HTML页面)用作修改viewmodel的工具。您需要验证的所有数据都在viewmodel中,因为您已经使用户可以更改的所有内容都可以观察到

功能测试(){
var self=这个;
self.users=ko.array([
{名称:ko.observable(“John Doe”)},
{名称:ko.observable(“Jane Doe”)}
]);
self.verify=函数(){
var usernames=self.users().map(函数(u){return ko.unwrap(u.name)});
警报('您已输入这些用户\n\n'+用户名。加入('\n'));
};
}
var vm=新测试();
ko.应用绑定(vm)



检查数据
您需要元素名称做什么?你没有通过Ajax提交表单数据吗?是的,我有两个按钮。使用上面的按钮,我只是对输入进行一些验证。使用另一个按钮,我正在进行实际提交,问题是“您不通过Ajax提交表单数据吗?”。是的,我通过Ajax提交表单数据。在提交表单时,我可以很好地获得模型中的值。但我希望这些文本框值位于客户端。在示例的第一行中设置
this。将
添加到observableArray,一行之后设置
this。将
添加到函数。决定这应该是什么。添加元素名的目的是什么?你没有通过Ajax提交表单数据吗?是的,我有两个按钮。使用上面的按钮,我只是对输入进行一些验证。使用另一个按钮,我正在进行实际提交,问题是“您不通过Ajax提交表单数据吗?”。是的,我通过Ajax提交表单数据。在提交表单时,我可以很好地获得模型中的值。但我希望这些文本框值位于客户端。在示例的第一行中设置
this。将
添加到observableArray,一行之后设置
this。将
添加到函数。你决定这个应该是什么。添加。我已经更新了我的代码。您可以检查我正在查找的内容。您的数据(
textbox
)不可见。用户可以更改的任何内容都必须是可观察的。我的代码正好显示了您需要执行的操作。我已更新了我的代码。您可以检查我正在查找的内容。您的数据(
textbox
)不可见。用户可以更改的任何内容都必须是可观察的。我的代码正好显示了您需要做什么。
self.verify= function (data, event) {
  //here I want the data that is entered in each of the inputs.      
}
    <div data-bind="foreach: { data: myData }">
        <div class="form">
            <div class="myClass">
                <input type="text" class="form-control" data-bind="value: $data.textbox, attr: { name: 'MyData[' + $index() + '].Textbox'}" />
            </div>    
            <div class="myClass">                    
                <input type="button" value="Add More" class="btn btn-primary" data-bind="click: $parent.add"/>
            </div>              
        </div>
    </div>
<div class="form">      
    <input type="button" value="Check Data" class="btn btn-primary" data-bind='click: checkData' />     
</div>
 this.add = ko.observableArray();

 this.add = function () {
        self.myData.push(
            {
                textbox: ""
            });
    };

 this.checkData = function (){  
   //Here I want to get whats entered in all the textboxes

 }