回答How to check if value exist in jQuery .data() function
(请不要将一堆数据值添加到表单对象的有效性,而不是我的决定)
给出了
Object {v1: "value11", v2: "value2", v3: "value3", v4: "value4", v5: "value5"} fiddle.jshell.net:25
Uncaught TypeError: Object #<Object> has no method 'each'
注意:如果我将对象包装在$(..)中,则它不起作用
已解决使用$ .each jsfiddle using $.each
$(function() {
$("form[name=update]").data("values", {"v1": "value11", "v2": "value2", "v3": "value3", "v4": "value4", "v5": "value5"});
$(".but").on("click",function(e) {
var $fData = $("form[name=update]").data("values");
var val = $(this).val();
console.log($fData);
$fData.each(function(n,i) {
console.log("!!!",n,i)
if (n[i]===val) {
alert("duplicate value");
return false;
}
})
e.preventDefault()
});
});
和
完全没有完成任务的$(function() {
$("form[name=update]").data("values", {"v1": "value11", "v2": "value2", "v3": "value3", "v4": "value4", "v5": "value5"});
$(".but").on("click",function() {
var $fData = $("form[name=update]").data("values");
var val = $(this).val();
var idx = $.grep($fData, function(n,i) {
console.log("n",n); // why no console output for this???
return n[i]===val;
});
console.log(idx);
if (idx!=-1) {
alert("duplicate value")
}
});
});
问题:
each
grep
是什么(之前只使用过一次grep)grep
答案 0 :(得分:4)
$.each
仅适用于jQuery对象,因此您需要包装对象:
$($fData).each(function (n, i) {
或将其传递给$.each
:
$.each($fdata, function(n, i) {
对于$.grep()
,问题是你的输入是一个对象,而不是一个数组。 $.grep
有点默默地失败了你:
grep: function( elems, callback, inv ) {
var retVal,
ret = [],
i = 0,
length = elems.length; // <-- Here's why
inv = !!inv;
// Go through the array, only saving the items
// that pass the validator function
for ( ; i < length; i++ ) {
retVal = !!callback( elems[ i ], i );
if ( inv !== retVal ) {
ret.push( elems[ i ] );
}
}
return ret;
},