如何获取所有行值制表符?

How to get all row values tabulator?

我有 editable table 使用制表符。

一切正常,但问题是单击时无法获取所有行值 "save button"

我正在尝试的是:

$(document).ready(function() {
var tabledata = [
  {id:1, name:"Oli Bob", age:"12", col:"red", dob:""},
  {id:2, name:"Mary May", age:"1", col:"blue", dob:"14/05/1982"},
  {id:3, name:"Christine Lobowski", age:"42", col:"green", dob:"22/05/1982"},
  {id:4, name:"Brendon Philips", age:"125", col:"orange", dob:"01/08/1980"},
  {id:5, name:"Margret Marmajuke", age:"16", col:"yellow", dob:"31/01/1999"},
 ];
 
var table = new Tabulator("#example-table", {
  height:205,
  data:tabledata,
  layout:"fitColumns",
  columns:[
   {title:"Name", field:"name", width:150},
   {title:"Age", field:"age", visible: false},
   {title:"Favourite Color", field:"col"},
   {title:"Date Of Birth", field:"dob", sorter:"date", align:"center"},
  ],
  footerElement:"<button id='save' class='pull-left' title='Save'>Save</button> ",
});

 $(document).on("click", "#save", function(){
   /* var data = $("#example-table").tabulator("getData"); */
   var data = $('#example-table').getData();
        console.log('save clicked');
 });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link href="https://unpkg.com/tabulator-tables@4.1.4/dist/css/tabulator.min.css" rel="stylesheet">
<script type="text/javascript" src="https://unpkg.com/tabulator-tables@4.1.4/dist/js/tabulator.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/tabulator/4.1.5/js/jquery_wrapper.js"></script>


<div id="example-table"></div>

当运行时显示错误

TypeError: $.widget is not a function

当我尝试使用时:

var data = $("#example-table").tabulator("getData");

我收到这个错误:

TypeError: $(...).tabulator is not a function

使用时:

var data = $('#example-table').getData();

错误是:

TypeError: $(...).getData is not a function

当我尝试使用此方法定义 table 时:

$("#example-table").tabulator({ //table setup options });

它没有显示任何内容(空白)。

谁能告诉我怎么了?或者给我参考如何获取所有行值?

你也可以在 jsfiddle 中试试,查看 here

而不是 var data = $('#example-table').getData();

使用,var data = table.getData();

你正在做的是将 getData() 链接到 jQuery 函数,但你必须在 Tabulator table 实例上实现 getData() ,这是你的 var table在上面创建。

希望这对您有所帮助。 谢谢!

基于我上次声明 table 内部函数的评论。

这是我在点击保存按钮时获取特定值的方法

$(document).ready(function() {

function generateGrid(){
  var tabledata = [
    {id:1, name:"Oli Bob", age:"12", col:"red", dob:""},
    {id:2, name:"Mary May", age:"1", col:"blue", dob:"14/05/1982"},
    {id:3, name:"Christine Lobowski", age:"42", col:"green", dob:"22/05/1982"},
    {id:4, name:"Brendon Philips", age:"125", col:"orange", dob:"01/08/1980"},
    {id:5, name:"Margret Marmajuke", age:"16", col:"yellow", dob:"31/01/1999"},
];
  var table = new Tabulator("#example-table", {
     height:205,
     data:tabledata,
     layout:"fitColumns",
     columns:[
       {title:"Name", field:"name", width:150},
       {title:"Age", field:"age", visible: false},
       {title:"Favourite Color", field:"col", editor:"input", formatter:
         function (row, formatterParams){
            let rowId = row.getData().id;
            let color = row.getData().col;
            
            return '<input type="text" class="txtAU" name="txtAU" id="txtAU'+rowId+'" value="' + color +'"/>';
            }
       },
       {title:"Date Of Birth", field:"dob", sorter:"date", align:"center"},
     ],
     footerElement:"<button id='save' class='pull-left' title='Save'>Save</button> ",
});
}
 
  $(document).on("click", "#view", function(){
   generateGrid();
   $('#example-table').show();
  });
  
 $(document).on("click", "#save", function(){
  
    var data_ = "";
    var i = 1;
    $("input[name='txtAU']").each(function(){
        data_=data_+$(this).val()+";";
        i++;
    });
    console.log(data_);
    console.log('save clicked');
 });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link href="https://unpkg.com/tabulator-tables@4.1.4/dist/css/tabulator.min.css" rel="stylesheet">
<script type="text/javascript" src="https://unpkg.com/tabulator-tables@4.1.4/dist/js/tabulator.min.js"></script>



<button id='view' class='pull-left' title='Save'>Show Table</button> 

<div id="example-table" style="display:none"></div>

如果你想像往常一样获取所有值并声明 table,你可以使用

var data = table.getData();

喜欢 Gaurav 的回答。谢谢,希望这对某人有所帮助。

版本 4.5+ 的更新:

在 4.5+ 版本中,有一个函数可以让您在无法访问 table 变量时使用查询选择器找到 table。 http://tabulator.info/docs/4.6/options#find-table

const table = Tabulator.prototype.findTable('#example-table')[0];
const data = table.getData();

原回答:

问题是因为您在函数内声明了 table 变量,所以它的范围是有限的。

如果您在全局范围内声明它,然后在函数内分配它,那么它将在任何地方都可以访问。

//global scope
var table

//assign inside table - notice no "var"
function generateGrid(){
    table = new Tabulator("#example-table", { ....
}

//you can then use it everywhere
var data = table.getData();