简短描述:
01)我将数据从JSON网址动态加载到HTML表格中。该脚本位于.js
文件标题中调用的外部HTML
文件中。
02)我使用第三列(MAIN VALUE)页面顶部的过滤器过滤结果。当我有静态数据时,脚本工作正常。自从我开始从JSON url动态提取表数据以来,它就停止了工作。
JS脚本在这里:
//It loads the data from the JSON file
$.getJSON(
'http://apolosiskos.co.uk/TEB/MOCK_DATA.json',
function(data){
var tr;
//It loads data from the JSON file to the table
$.each (data, function (key, val) {
tr = $('<tr/>');
tr.append('<td class="name" rel="' + val.first_name + '">' + val.first_name + '</td>');
tr.append('<td >' + 'TEST' + '</td>');
tr.append('<td class="metric2" >' + val.id + '</td>');
tr.append('<td class="metric3"><span class="multTotal">' +'0.00'+ '</span></td>');
tr.append('<td class="metric3-100"><span class="metric3-100">' +'0.00'+ '</span></td>');
tr.append('<td class="metric1-100"><span class="metric1-100">' +'0.00'+ '</span></td>');
$('table').append(tr);
});
$("input").keyup(minmax);
//I even tried the below but did not work
$('body').on('input', '#counter-low, #counter-high', minmax);
});
//The filter function for the MIN MAX values in the MAIN VALUE column
function minmax() {
var table = $('table').DataTable();
$.fn.dataTable.ext.search.push(function (settings, data, dataIndex) {
return parseFloat(data[2]) >= parseFloat($('#counter-low').val() || data[2])
&& parseFloat(data[2]) <= parseFloat($('#counter-high').val() || data[2])
});
$('#counter-low, #counter-high').on('keyup', table.draw);
}
UPD :我在此处粘贴代码,该代码在以下答案之后有效:
$(function(){
//It loads the data from the JSON file
$.getJSON(
'http://apolosiskos.co.uk/TEB/MOCK_DATA.json',
function(data){
var tr;
//It loads data from the JSON file to the table
$.each (data, function (key, val) {
tr = $('<tr/>');
tr.append('<td class="name" rel="' + val.first_name + '">' + val.first_name + '</td>');
tr.append('<td ><input class="metric1"/>' + '</td>');
tr.append('<td class="metric2" >' + val.id + '</td>');
tr.append('<td class="metric3"><span class="multTotal">' +'0.00'+ '</span></td>');
tr.append('<td class="metric3-100"><span class="metric3-100">' +'0.00'+ '</span></td>');
tr.append('<td class="metric1-100"><span class="metric1-100">' +'0.00'+ '</span></td>');
$('table').append(tr);
});
//It loads dimension1 from the JSON file to the filter
$.each (data, function (key, val) {
li = $('<li/>');
li.append('<input rel="name" type="checkbox" value="' + val.first_name + '"><label for="cb1">' + val.first_name + '</label></li>');
$('ul').append(li);
});
$('.counter').keyup(minmax);
$('body').on('input click', 'input:checkbox', filters);
});
});
//Multiplication of the cells function
function multInputs() {
var mult = 0;
$("tr").each(function () {
var $val1 = $('.metric1', this).val();
var $val2 = $('.metric2', this).text();
var $total = ($val1 * 1) * $val2 - $val1;
$('.multTotal', this).text($total.toPrecision(3));
var $val3 = $('.multTotal', this).text();
var $total2 = $val3 / 100
$('.metric3-100',this).text($total2.toPrecision(3));
var $total3 = $val1 / 100
$('.metric1-100',this).text($total3.toPrecision(2));
mult += $total;
});
}
//Filter function for the Dimension1 values
function filters() {
var showAll = true;
$('tr').not('.first').hide();
$('input[type=checkbox]').each(function () {
if ($(this)[0].checked) {
showAll = false;
var dimension1= $(this).attr('rel');
var value = $(this).val();
$('td.' + dimension1+ '[rel="' + value + '"]').parent('tr').show();
}
});
if(showAll){
$('tr').show();
}
}
//The filter function for the MIN MAX values in the MAIN VALUE column
function minmax() {
var table = $('table').DataTable();
$.fn.dataTable.ext.search.push(function (settings, data, dataIndex) {
return parseFloat(data[2]) >= parseFloat($('#counter-low').val() || data[2])
&& parseFloat(data[2]) <= parseFloat($('#counter-high').val() || data[2])
});
$('#counter-low, #counter-high').on('keyup', table.draw);
}
答案 0 :(得分:2)
所以,回答这里,我已经下载了你的html,json和js。 然后我做了3次更改。
$(function(){});
内的所有内容都放到JS中,在整个DOM加载后执行所有操作。在min和max输入中添加一个类,如:
<input id="counter-min" class="counter"/>
<input id="counter-max" class="counter"/>
并在js设置为$('.counter').keyup( minmax )
;将此minmax作为您已创建的函数;
我把表格html像这样:
<table>
<thead>
<tr id="ProductID" class="first">
<th>NAME</th>
<th>INPUT</th>
<th>MAIN VALUE</th>
<th>DIFF</th>
<th>DIFF /100</th>
<th>MV /100</th>
</tr>
</thead>
<tbody> </tbody>
</table>
所以,这对我有用,我不知道是否
第二次编辑 我在这里做,我只是评论你的getJson直接在你的桌子上添加数据然后,我做了我之前说过的话:
1 - 使用$(function() { .. });
2 - 在counter-high和counter-low上添加类,只是为了将事件附加到它们然后用$('.className').keyup( minmax );
附加事件
和
3 - 在表格中添加thead和tbody元素
//It loads the data from the JSON file
$(function() {
var data = [{"id":2.2,"first_name":"Debra","last_name":"Rodriguez","email":"drodriguez0@admin.ch","gender":"Female","ip_address":"90.22.159.108"},
{"id":2,"first_name":"Julie","last_name":"Lynch","email":"jlynch1@tumblr.com","gender":"Female","ip_address":"54.182.62.180"},
{"id":3,"first_name":"Norma","last_name":"Washington","email":"nwashington2@theatlantic.com","gender":"Female","ip_address":"70.163.106.64"},
{"id":4,"first_name":"Bobby","last_name":"Castillo","email":"bcastillo3@nbcnews.com","gender":"Male","ip_address":"91.202.59.171"},
{"id":5,"first_name":"Henry","last_name":"Chavez","email":"hchavez4@chronoengine.com","gender":"Male","ip_address":"32.237.37.185"},
{"id":6,"first_name":"Debra","last_name":"Howard","email":"showard5@stumbleupon.com","gender":"Female","ip_address":"17.217.42.49"},
{"id":7,"first_name":"Jason","last_name":"Powell","email":"jpowell6@telegraph.co.uk","gender":"Male","ip_address":"14.81.195.117"},
{"id":8,"first_name":"Sean","last_name":"Burns","email":"sburns7@hp.com","gender":"Male","ip_address":"213.164.85.212"},
{"id":9,"first_name":"Jacqueline","last_name":"Gordon","email":"jgordon8@bloglines.com","gender":"Female","ip_address":"18.251.62.55"},
{"id":10,"first_name":"Russell","last_name":"Richards","email":"rrichards9@com.com","gender":"Male","ip_address":"27.226.59.80"},
{"id":11,"first_name":"Albert","last_name":"Perkins","email":"aperkinsa@hc360.com","gender":"Male","ip_address":"243.122.251.248"},
{"id":12,"first_name":"Michael","last_name":"Willis","email":"mwillisb@deviantart.com","gender":"Male","ip_address":"252.197.211.230"},
{"id":13,"first_name":"Joan","last_name":"Hamilton","email":"jhamiltonc@weebly.com","gender":"Female","ip_address":"204.70.110.117"},
{"id":14,"first_name":"Eric","last_name":"Garcia","email":"egarciad@yahoo.co.jp","gender":"Male","ip_address":"178.221.216.3"},
{"id":15,"first_name":"Frank","last_name":"Olson","email":"folsone@amazon.co.uk","gender":"Male","ip_address":"245.25.170.33"},
{"id":16,"first_name":"Kelly","last_name":"Fuller","email":"kfullerf@tripod.com","gender":"Female","ip_address":"199.209.173.51"},
{"id":17,"first_name":"Frank","last_name":"Cook","email":"fcookg@google.com","gender":"Male","ip_address":"58.30.243.1"},
{"id":18,"first_name":"Alan","last_name":"Rice","email":"ariceh@sciencedirect.com","gender":"Male","ip_address":"44.231.199.117"},
{"id":19,"first_name":"Mark","last_name":"Greene","email":"mgreenei@paypal.com","gender":"Male","ip_address":"45.34.44.2"},
{"id":20,"first_name":"Charles","last_name":"King","email":"ckingj@clickbank.net","gender":"Male","ip_address":"237.30.205.186"}];
//$.getJSON(
//'http://apolosiskos.co.uk/TEB/MOCK_DATA.json',
//function(data) {
var tr;
//It loads data from the JSON file to the table
$.each(data, function(key, val) {
tr = $('<tr/>');
tr.append('<td class="name" rel="' + val.first_name + '">' + val.first_name + '</td>');
tr.append('<td >' + 'TEST' + '</td>');
tr.append('<td class="metric2" >' + val.id + '</td>');
tr.append('<td class="metric3"><span class="multTotal">' + '0.00' + '</span></td>');
tr.append('<td class="metric3-100"><span class="metric3-100">' + '0.00' + '</span></td>');
tr.append('<td class="metric1-100"><span class="metric1-100">' + '0.00' + '</span></td>');
$('table').append(tr);
});
$('body').on('click', 'input[type=checkbox]', minmax);
$('.counter').keyup(minmax);
$('input').keyup(multInputs);
$('body').on('click', '#btnFilter', filtermin);
});
//});
//The filter function for the first column (NAME)
//This have to work together of the minmax function
function filters() {
//if anyone is checked, return true to show all
var checkboxChecked = $('input[type=checkbox]:checked');
if (checkboxChecked.length <= 0) {
$('tr').show();
return true;
}
$('tr').not('.first').hide();
//else, find the name checked and verify with the name passed as parameter
checkboxChecked.each(function() {
var dimension1 = $(this).attr('rel');
var value = $(this).val();
$('td.' + dimension1 + '[rel="' + value + '"]').parent('tr').show();
});
}
//Multiplication of the cells function
function multInputs() {
var mult = 0;
$("tr").each(function() {
var $val1 = $('.metric1', this).val();
var $val2 = $('.metric2', this).text();
var $total = ($val1 * 1) * $val2 - $val1;
$('.multTotal', this).text($total.toPrecision(3));
var $val3 = $('.multTotal', this).text();
var $total2 = $val3 / 100
$('.metric3-100', this).text($total2.toPrecision(3));
var $total3 = $val1 / 100
$('.metric1-100', this).text($total3.toPrecision(2));
mult += $total;
});
}
//The filter function for the MIN MAX values in the MAIN VALUE column
function minmax() {
filters();
$.fn.dataTable.ext.search.push(function(settings, data, dataIndex) {
return parseFloat(data[2]) >= parseFloat($('#counter-low').val() || data[2]) &&
parseFloat(data[2]) <= parseFloat($('#counter-high').val() || data[2]);
});
var table = $('table').DataTable();
$('#counter-low, #counter-high').on('keyup', table.draw);
}
function filtermin() {
var value = $('#filter').val();
$('tr').show();
$('tr td.odds').each(function() {
if ($(this).text() < value) {
$(this).parent().hide();
}
});
}
<head>
<meta charset="utf-8">
<meta http-equiv="Access-Control-Allow-Origin" content="*" />
<title>json extract in datorama tables</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script src="https://cdn.datatables.net/1.10.13/js/jquery.dataTables.min.js"></script>
<script type="text/javascript" language="javascript" src="teste.js"></script>
<link rel="stylesheet" href="css/main.css"/>
<style href="https://cdn.datatables.net/1.10.13/css/jquery.dataTables.min.css"></style>
</head>
<body>
<h1>discrepancy checker after extracting data in JSON</h1>
<hr/>
<div class="row">
<div class="col-sm-4 filter-columns">
<div class="ac-custom ac-checkbox ac-cross" autocomplete="off">
<h2>Dimension1</h2>
<ul>
<li><input rel="name" type="checkbox" value="Debra" id="cb1"><label for="cb1">Debra</label></li>
<li><input rel="name" type="checkbox" value="Julie" id="cb2"><label for="cb2">Julie</label></li>
<li><input rel="name" type="checkbox" value="Norma" id="cb3"><label for="cb3">Norma</label></li>
<li><input rel="name" type="checkbox" value="Bobby" id="cb4"><label for="cb4">Bobby</label></li>
<li><input rel="name" type="checkbox" value="Henry" id="cb5"><label for="cb5">Henry</label></li>
</ul>
</div>
</div>
<div class="col-sm-4 filter-columns-alt">
<div class="ac-custom ac-checkbox ac-cross" autocomplete="off">
<h2>MIN MAX</h2>
Min:<input id="counter-low" class="counter" type="text" />
Max:<input id="counter-high" class="counter" type="text" />
</div>
</div>
<div class="col-sm-4 filter-columns-alt">
<input type='text' id='filter' /> <button id='btnFilter'>Go</button>
</div>
</div>
<div id="body">
<table>
<thead>
<tr id="ProductID" class="first">
<th>NAME</th>
<th>INPUT</th>
<th>MAIN VALUE</th>
<th>DIFF</th>
<th>DIFF /100</th>
<th>MV /100</th>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
</body>