我已经在这个简单的脚本上工作了几个小时,现在已经碰壁了。我有一个由JSON值组成的数组。当用户搜索字符串并单击该按钮时,脚本会根据存储在数组中的值检查字符串。
我坚持的部分是条件,它总是不返回匹配 - 即使我输入一个我知道在JSON文件中的字符串。
以下代码。任何指导/指示将不胜感激。
感谢您的帮助!
标记。
$('#validate-info').on('click', function(){
// Get data, initiate callback
$.getJSON('memberships.json', validateMembership);
// Execute callback function
function validateMembership(data) {
// Capture entered value
var userVal = document.getElementById('form-data').value;
console.log(userVal);
var infoTxt = '';
// Push all items into an Array
var infoArray = [];
$.each(data, function(member, memberInfo) {
infoTxt += '<p><strong>Name:</strong> ' + memberInfo.name + '<br />';
infoTxt += '<strong>Membership No.:</strong> ' + memberInfo.number + '<br />';
infoTxt += '<strong>Expiry Date:</strong> ' + memberInfo.expiry + '</p>';
infoArray.push({
name: memberInfo.name,
number: memberInfo.number,
expiry: memberInfo.expiry
});
});
if ($.inArray(userVal, infoArray) > -1 ) {
// the value is in the array
$('#response').html('<p style="color: green;">In the array</p>');
} else {
$('#response').html('<p style="color: red;">Sorry, no matches.</p>');
}
}
});
答案 0 :(得分:2)
您将输入字符串与对象进行比较,它们永远不会匹配。您只需要与名称进行比较。您可以使用Array.prototype.some
函数来测试它们是否匹配。
if (infoArray.some(function(obj) {
return obj.name == userVal;
})) {
$('#response').html('<p style="color: green;">In the array</p>');
} else {
$('#response').html('<p style="color: red;">Sorry, no matches.</p>');
}
您也可以在推送infoArray
的循环中执行此操作。
var match = false;
$.each(data, function(member, memberInfo) {
infoTxt += '<p><strong>Name:</strong> ' + memberInfo.name + '<br />';
infoTxt += '<strong>Membership No.:</strong> ' + memberInfo.number + '<br />';
infoTxt += '<strong>Expiry Date:</strong> ' + memberInfo.expiry + '</p>';
infoArray.push({
name: memberInfo.name,
number: memberInfo.number,
expiry: memberInfo.expiry
});
if (memberInfo.name == userVal) {
match = true;
}
});
if (match) {
$('#response').html('<p style="color: green;">In the array</p>');
} else {
$('#response').html('<p style="color: red;">Sorry, no matches.</p>');
}