我有以下功能:
function generateJSONstringforuncheckedfilters(){
jsonstring = '';
jsonstring = "[";
$('body').on('click', 'input', function(){
jsonstring += "[{'OrderGUID': '"+ $(this).attr('data-orderguid') +"' 'FilterGUID': '"+ $(this).attr('data-filterguid') +"', 'nValue': 0, 'Value': '"+ $(this).attr('value') +"', 'Operator': 'NULL', 'Unit': 'NULL'}";
});
jsonstring += "]";
console.log(jsonstring); // Output: []
}
我的输出是= []
但我想实现这个目标:
[{'OrderGUID': '46dd8c82-44a6-4dc5-9517-320c31645211' 'FilterGUID': '17caabea-c313-48c9-b965-739ef8d09a1f', 'nValue': 0, 'Value': 'volladressierbar', 'Operator': 'NULL', 'Unit': 'NULL'}]
如果我再次点击复选框字段,jsonstring必须像这样展开:
[
{'OrderGUID': 'aaaaaa' 'FilterGUID': '17caabea-c313-48c9-b965-739ef8d09a1f', 'nValue': 0, 'Value': 'volladressierbar', 'Operator': 'NULL', 'Unit': 'NULL'},
{'OrderGUID': 'bbbbbb' 'FilterGUID': '17caabea-c313-48c9-b965-739ef8d09a1f', 'nValue': 0, 'Value': 'volladressierbar', 'Operator': 'NULL', 'Unit': 'NULL'}
]
我希望你能理解我的问题。
编辑:
这些是我的复选框:
<input type="checkbox" checked="checked" id="check1" value="volladressierbar" name="volladressierbar" data-filterguid="17caabea" data-orderguid="aaaa" count="1"> volladressierbar
<input type="checkbox" checked="checked" id="check1" value="teiladressierbar" name="teiladressierbar" data-filterguid="18cagbea" data-orderguid="bbbb" count="1"> teiladressierbar
答案 0 :(得分:3)
你可以尝试这样的事情:
var uncheckedFilters = [];
function generateJSONstringforuncheckedfilters(){
$('body').on('click', 'input', function() {
var checkboxSelector = $(this);
var checkboxFilterGUID = checkboxSelector.attr('data-filterguid');
if(checkboxSelector.is(':checked')) {
uncheckedFilters.forEach(function(filter) {
if(filter.FilterGUID === checkboxFilterGUID) {
var filterIndex = uncheckedFilters.indexOf(filter);
if(filterIndex > -1) {
uncheckedFilters.splice(filterIndex, 1);
}
}
});
} else {
uncheckedFilters.push({
OrderGUID: checkboxSelector.attr('data-orderguid'),
FilterGUID: checkboxFilterGUID,
nValue: 0,
Value: checkboxSelector.attr('value'),
Operator: 'NULL',
Unit: 'NULL'
});
}
console.log(JSON.stringify(uncheckedFilters));
});
}
通过这种方式,您将生成一个过滤器对象数组,您可以使用JSON.stringify将其简单地转换为json,如上例所示。
的jsfiddle: https://jsfiddle.net/7j4g0ddb/
答案 1 :(得分:1)
试试这个
$('body').on('click', 'input', function(){
var jsonstring = '';
jsonstring = "[";
$( 'body' ).find( "input[type='checkbox']:checked" ).each( function(){
jsonstring += generateJSONstringforuncheckedfilters( $( this ) ) ;
} );
jsonstring += "]";
console.log(jsonstring);
});
function generateJSONstringforuncheckedfilters( $thisObj )
{
return "{'OrderGUID': '"+ $thisObj.attr('data-orderguid') +"' 'FilterGUID': '"+ $thisObj.attr('data-filterguid') +"', 'nValue': 0, 'Value': '"+ $thisObj.attr('value') +"', 'Operator': 'NULL', 'Unit': 'NULL'}";
}
答案 2 :(得分:0)
首先,有关信息,所有元素都是HTML文档中的一个类似ID(您可以看到W3C normes),这是HTML代码:
<input type="checkbox" checked="checked" id="check1" value="volladressierbar" />
<input type="checkbox" checked="checked" id="check1" value="teiladressierbar" />
<!-- Id of both Elements is similar -->
这是正确的:
<input type="checkbox" checked="checked" id="check1" value="volladressierbar" />
<input type="checkbox" checked="checked" id="check2" value="teiladressierbar" />
此外,您可以检查javascript代码:
$('body').on('click', 'input', function(){
var arrayJson = [];
// get all input checked
$( 'body' ).find( "input[type='checkbox']:checked" ).each( function(){
var recupObject = "{'OrderGUID': '"+ $(this).attr('data-orderguid') +"' 'FilterGUID': '"+ $(this).attr('data-filterguid') +"', 'nValue': 0, 'Value': '"+ $(this).attr('value') +"', 'Operator': 'NULL', 'Unit': 'NULL'}";
arrayJson.push(recupObject);
});
// create a json with all data input getted.
if (arrayJson.length > 0){
var jsonOutput = "[";
for (index = 0; index < arrayJson.length; index++) {
jsonOutput += arrayJson[index] + ",";
}
jsonOutput = jsonOutput.substring(0, jsonOutput.length-1); // remove last ','
jsonOutput += "]";
}
console.log(jsonOutput ); // Log the Json output
});