Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.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 在jQuery';每个()都完成了吗?_Javascript_Jquery_Knockout.js_Each - Fatal编程技术网

Javascript 在jQuery';每个()都完成了吗?

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

我正在使用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.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;
  }
}