Javascript 在jQuery';每个()都完成了吗?
我正在使用knockout.js。我在一个表单中有几个可编辑的网格,这些网格中字段的名称很重要,因此使用Javascript 在jQuery';每个()都完成了吗?,javascript,jquery,knockout.js,each,Javascript,Jquery,Knockout.js,Each,我正在使用knockout.js。我在一个表单中有几个可编辑的网格,这些网格中字段的名称很重要,因此使用uniqueName不是一个选项 所以我要做的是在用户单击submit时调用一个函数来重命名字段 function renameFields(o, index) { var el_name = $(o).attr('name'); var name_index = el_name.lastIndexOf('_') + 1; $(o).attr('name', el_name
uniqueName
不是一个选项
所以我要做的是在用户单击submit时调用一个函数来重命名字段
function renameFields(o, index) {
var el_name = $(o).attr('name');
var name_index = el_name.lastIndexOf('_') + 1;
$(o).attr('name', el_name.substring(0, name_index) + index);
}
function Submit() {
self.submit = function() {
// Use unique AND meaningful input/textarea [name]s in .grids.
window.index_arr = [];
$('.grid').each(function() {
$(this)
.children('.row')
.each(function(i){
window.index_arr.push(i);
$(this)
.find('input, textarea')
.each(function() {
renameFields($(this), window.index_arr[i]);
})
})
});
// Submit the form
return true;
}
}
renameFields
工作正常,但是true
在每个字段上调用之前都会返回。让Knockout做一些肮脏的工作,让属性的索引保持最新,如下所示:
HTML:
请告诉我们有关如何设置单击处理程序的更多信息 我要试试看。。。我想你是在和我打交道 如果没有小提琴,我无法测试它,但请尝试以下代码
var renameFields = function(o, index) {
var el_name = $(o).attr('name');
var name_index = el_name.lastIndexOf('_') + 1;
$(o).attr('name', el_name.substring(0, name_index) + index);
}
var Submit = function() {
self.submit = function() {
// Use unique AND meaningful input/textarea [name]s in .grids.
window.index_arr = [];
$('.grid').each(function() {
$(this)
.children('.row')
.each(function(i){
window.index_arr.push(i);
$(this)
.find('input, textarea')
.each(function() {
renameFields($(this), window.index_arr[i]);
})
})
});
// Submit the form
return true;
}
}
当用户单击“提交”时调用它。@Nix@ColBeseder这不是打字错误。我只是没有包括显示绑定的html,因为我知道这不是问题所在。正在调用该函数,并在完成字段重命名之前返回
true
。你看了整篇文章了吗?我知道这不是你的问题,但是你有没有想过绑定名称
属性,让KO保持它们的最新状态?@johnnycardy我没有。我是柯的新手,不知道这是可能的。我猜这可能是类似于attr:{name:'whatever_'+var.length}
,对吗?@curtisblackwell是的,这是绑定属性的正确语法。我将创建一个答案……当将$index
作为名称添加到字符串后,$index
返回一个函数,而不是索引本身。看见如果你删除“test”+
,它就可以正常工作了。只需要将()
添加到索引。啊,很抱歉。好的。
var vm = {
rows: ko.observableArray()
};
ko.applyBindings(vm, document.getElementById("grid"));
var renameFields = function(o, index) {
var el_name = $(o).attr('name');
var name_index = el_name.lastIndexOf('_') + 1;
$(o).attr('name', el_name.substring(0, name_index) + index);
}
var Submit = function() {
self.submit = function() {
// Use unique AND meaningful input/textarea [name]s in .grids.
window.index_arr = [];
$('.grid').each(function() {
$(this)
.children('.row')
.each(function(i){
window.index_arr.push(i);
$(this)
.find('input, textarea')
.each(function() {
renameFields($(this), window.index_arr[i]);
})
})
});
// Submit the form
return true;
}
}