jquery 每次循环 return false 不结束函数
jquery each loop return false not end the function
我有一个函数可以获取点分隔的字符串并将其解析为数组。
我想循环这些数组元素并检查一个值是否大于 255 和 return false,如果不继续函数语句和 return true 作为函数结束。但它永远不会停止循环..并且总是 return true.
代码如下:
checkipAddress = function(value){//instance value: 999.999.999.999 result:true
debugger
var array = value.split('.');
$.each(array, function(index,val){
debugger
if(parseInt(val)>255)
return false; // it should end the loop and exit function with return false.
});
return true;
}
从一个函数返回并不会神奇地使调用它的函数结束,更不用说使用特定的 return 值了。
如果你想这样做,你必须设置一个外部函数将使用的变量:
checkipAddress = function(value){
var rv = true; // <=== Default return value
var array = value.split('.');
$.each(array, function(index,val){
if(parseInt(val)>255)
return rv = false; // <=== Assigns false to `rv` and returns it
});
return rv; // <=== Use rv here
}
旁注:您的函数将很乐意允许 "0.-234343.-1.0"
和 "1foo.2foo.3foo.4foo"
等 IP 字符串。您可能会考虑:
checkipAddress = function(value){
var rv = true; // <=== Default return value
var array = value.split('.');
$.each(array, function(index,str){
str = $.trim(str);
var val = +str;
if(!str || val < 0 || val > 255)
return rv = false; // <=== Assigns false to `rv` and returns it
});
return rv; // <=== Use rv here
}
好一点,但它也不会检查 IP 是否恰好有四个部分,并允许像 "1.1e2.3.4"
(指数表示法)这样的值。当然,所有这些都是特定于 IPv4 的,而我们正在进入 IPv6 世界...
坚持使用 IPv4,但是,如果您的目标是确保它是一个由四部分组成的正常形式的 IPv4 地址,我会选择正则表达式:
checkipAddress = function(value){
var rv;
var match = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec(value);
var n, part;
if (match) {
rv = true;
for (n = 1; rv && n < 5; ++n) {
part = +match[n]; // We know it's not blank from the regex
if (part > 255) { // We know it's not negative or fractional from the regex
rv = false;
}
}
} else {
rv = false;
}
return rv;
}
或在现代浏览器上(或使用像样的 Array#every
shim):
checkipAddress = function(value){
var match = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec(value);
rv = !match ? false : Array.prototype.slice.call(match, 1).every(function(entry) {
// We know it's not blank, negative, or fractional from the regex
return +entry <= 255;
});
return rv;
}
我有一个函数可以获取点分隔的字符串并将其解析为数组。 我想循环这些数组元素并检查一个值是否大于 255 和 return false,如果不继续函数语句和 return true 作为函数结束。但它永远不会停止循环..并且总是 return true.
代码如下:
checkipAddress = function(value){//instance value: 999.999.999.999 result:true
debugger
var array = value.split('.');
$.each(array, function(index,val){
debugger
if(parseInt(val)>255)
return false; // it should end the loop and exit function with return false.
});
return true;
}
从一个函数返回并不会神奇地使调用它的函数结束,更不用说使用特定的 return 值了。
如果你想这样做,你必须设置一个外部函数将使用的变量:
checkipAddress = function(value){
var rv = true; // <=== Default return value
var array = value.split('.');
$.each(array, function(index,val){
if(parseInt(val)>255)
return rv = false; // <=== Assigns false to `rv` and returns it
});
return rv; // <=== Use rv here
}
旁注:您的函数将很乐意允许 "0.-234343.-1.0"
和 "1foo.2foo.3foo.4foo"
等 IP 字符串。您可能会考虑:
checkipAddress = function(value){
var rv = true; // <=== Default return value
var array = value.split('.');
$.each(array, function(index,str){
str = $.trim(str);
var val = +str;
if(!str || val < 0 || val > 255)
return rv = false; // <=== Assigns false to `rv` and returns it
});
return rv; // <=== Use rv here
}
好一点,但它也不会检查 IP 是否恰好有四个部分,并允许像 "1.1e2.3.4"
(指数表示法)这样的值。当然,所有这些都是特定于 IPv4 的,而我们正在进入 IPv6 世界...
坚持使用 IPv4,但是,如果您的目标是确保它是一个由四部分组成的正常形式的 IPv4 地址,我会选择正则表达式:
checkipAddress = function(value){
var rv;
var match = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec(value);
var n, part;
if (match) {
rv = true;
for (n = 1; rv && n < 5; ++n) {
part = +match[n]; // We know it's not blank from the regex
if (part > 255) { // We know it's not negative or fractional from the regex
rv = false;
}
}
} else {
rv = false;
}
return rv;
}
或在现代浏览器上(或使用像样的 Array#every
shim):
checkipAddress = function(value){
var match = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec(value);
rv = !match ? false : Array.prototype.slice.call(match, 1).every(function(entry) {
// We know it's not blank, negative, or fractional from the regex
return +entry <= 255;
});
return rv;
}