在我的表单中,只是我在从服务器加载后更改了已更改的值。因为我正在做这个功能:
$(checkBox).each(function(i,el){
status.push($(el).prop("checked"));
$(el).click(function(){
var clickedIndex = checkBox.index($(this));
var prevStatus = status[clickedIndex];
if(prevStatus !== $(this).prop("checked")){
statusChanged.push($(this).val() + ( $(this).prop("checked") ? add.toLowerCase() : remove.toLowerCase()));
}else{
var that = $(this);
statusChanged = $.grep(statusChanged, function(value) {
return value != that.val() + add.toLowerCase()
});
statusChanged = $.grep(statusChanged, function(value) {
return value != that.val() + remove.toLowerCase()
});
}
console.log(statusChanged);
})
})
在这个函数中,在else部分(statusChanged)我调用$ .grep函数2次为"add"
和"remove"
- 如果我写这样的函数(仅此部分)
var that = $(this);
statusChanged = $.grep(statusChanged, function(value) {
return value != that.val() + add.toLowerCase() || that.val() + remove.toLowerCase() //not working
});
不工作..?这里有什么问题或者$,grep不接受or(||)三元运算符,或者任何一个给出其他简短的方法..请
提前谢谢。答案 0 :(得分:1)
“$,grep不接受or(||)三元运算符”
是的,它会。 $.grep()
期望你的函数返回一个布尔值,但它并不关心你如何获得布尔值。
如果您的问题是如何检查value
是否未添加或删除,那么您可以执行此操作:
var that = $(this);
statusChanged = $.grep(statusChanged, function(value) {
return value != that.val() + add.toLowerCase()
&& value != that.val() + remove.toLowerCase();
});
也就是说,value
未添加和 value
的测试不会被删除 - 但它可能是任何其他值。
每次调用回调时调用.val()
和.toLowerCase()
似乎有点令人讨厌,所以我可能会这样做:
var val = $(this).val(),
valAdd = val + add.toLowerCase(),
valRemove = val + remove.toLowerCase();
statusChanged = $.grep(statusChanged, function(value) {
return value != valAdd && value != valRemove;
});
答案 1 :(得分:1)
实际上,运行此代码:
statusChanged = $.grep(statusChanged, function(value) {
return value != that.val() + add.toLowerCase()
});
statusChanged = $.grep(statusChanged, function(value) {
return value != that.val() + remove.toLowerCase()
});
不执行or
- 操作(||
)。它是and
。如果您在一个条件上筛选列表,然后在第二个条件下筛选相同的列表,它将在两个条件下进行筛选(and
);不在其中一个上(or
)。
您需要做的是在新代码中使用&&
:
var that = $(this);
statusChanged = $.grep(statusChanged, function(value) {
return (value != that.val() + add.toLowerCase()) && (value != that.val() + remove.toLowerCase());
});
修改强>
此外,与上面提到的其他一些答案一样,您应该注意优先顺序。将个别案例包裹在括号中(就像我在上面添加的那样)。
答案 2 :(得分:0)
我认为这与运营商优先权有关; +
的出发率高于!=
。
逻辑也是错误的,你要检查值是既不那个。
尝试将行更改为:
return (value != that.val() + add.toLowerCase()) && (value != that.val() + remove.toLowerCase());