我正在尝试向某些div添加或删除类。 应根据html的值为这些div分配不同的类。 我不确定我做错了什么,但我的代码无效。
这是我的代码:
$.ajax({
type: 'POST',
url: 'loc/bcheck.php',
success: function(data){
tArrx = new Array(data);
},
complete: function(){
$('.bHr').each(function(){
curElm = $(this);
var bTm = curElm.html();
if ($.inArray(bTm, tArrx) !== -1){
curElm.addClass('disabled');
curElm.removeClass('available');
}
else{
curElm.addClass('available');
curElm.removeClass('disabled');
}
});
}
});
<div class="bHr">1</div>
<div class="bHr">5</div>
正确捕获div的'html的所有值。 并且该函数运行没有错误。 但是我总是得到相同的结果,数组中没有值。
'data'是 1“,”2“,”3“,”4 并使用console.log返回 [“1”,“2”,“3”, “4”]
答案 0 :(得分:1)
我认为问题是new Array(data)
,如果数据是字符串类型,那么它创建一个数组,其中一个元素是字符串,否则如果数据是数组,那么tArrx
将是一个数组使用1个元素作为数组,以便$.inArray()
始终返回-1
。
$.ajax({
type: 'POST',
url: 'loc/bcheck.php',
//set datatype as json
dataType: 'json',
success: function (data) {
var tArrx = data;
$('.bHr').each(function () {
var curElm = $(this);
//wrong variable name& you might have to trim the html contents
var bTm = curElm.html().trim();
if ($.inArray(bTm, tArrx) !== -1) {
curElm.addClass('disabled');
curElm.removeClass('available');
} else {
curElm.addClass('available');
curElm.removeClass('disabled');
}
});
}
});
答案 1 :(得分:1)
您实际上已经创建了一个多维数组
tArrx = new Array(data);
这就是你匹配数组的方式
var data = ["1","2","3","4"];
var tArrx = new Array(data);
confirm(tArrx[0]);
confirm(data);
confirm($.inArray('1', tArrx[0]) !== -1);
最好还是不要将数据转换为数组
var data = ["1","2","3","4"];
confirm(data);
confirm($.inArray('1', data) !== -1);
我修改了示例以尽可能地复制您的条件。
var data = '1","2","3","4';
var tArrx = new Array(data);
console.log('data '+data);
console.log('data.length '+data.length);
console.log('data[0] '+data[0]);
console.log('data[1] '+data[1]);
console.log('data[2] '+data[2]);
console.log('data[3] '+data[3]);
console.log(tArrx.length);
console.log(tArrx[0].length);
console.log(tArrx);
console.log(tArrx[0]);
$('.bHr').each(function(){
curElm = $(this);
var bTm = curElm.html();
console.log(typeof bTm);
console.log($.inArray(bTm, tArrx) !== -1);
console.log($.inArray(bTm, tArrx[0]) !== -1);
console.log($.inArray(bTm, data) !== -1);
});
没有从PHP请求返回的开头和结尾引号导致数组赋值返回长度为1的数组,该数组填充了长度为13的字符串。这将导致jQuery.inArray()
方法找不到匹配1和13字符串。如果传递字符串,它可以找到1。修复丢失的开始和结束qoutes将是您最好的解决方案。从更新的工作示例中查看控制台日志。
data 1","2","3","4
data.length 13
data[0] 1
data[1] "
data[2] ,
data[3] "
1
13
["1","2","3","4"]
1","2","3","4
string
false
true
true
string
false
false
false
答案 2 :(得分:0)
在我看来,你必须施展变量:
if ($.inArray(bTm.toString(), tArrx) !== -1)
答案 3 :(得分:0)
你在这一行有拼写错误:
if ($.inArray(bTm, tArrx) !== -1){
不应该是:
if ($.inArray(Tbm, tArrx) !== -1){
答案 4 :(得分:0)
所以,我明白了。问题是PHP响应不是PHP数组。为了解决这个问题,我将我的响应作为一个数组并将其添加到我的PHP文件中:
json_encode($tArrx);
并按如下方式更改了我的jQuery:
$.ajax({
type: 'POST',
url: 'loc/bcheck.php',
dataType: 'json',
success: function (data) {
tArrx = data;
},
complete: function(){
$('.bHr').each(function(){
curElm = $(this);
var bTm = curElm.html();
if ($.inArray(bTm, tArrx) !== -1){
curElm.addClass('disabled');
curElm.removeClass('available');
}
else{
curElm.addClass('available');
curElm.removeClass('disabled');
}
});
}
});
我用你们所有人的例子来实现这一点,我感谢你们。没有你的帮助就不可能做到!