希望这对某人来说很容易。
我有一组复选框,其值为1,2,3等,具有相同的名称属性(cp_bundle)。
我使用以下代码获取这些复选框的逗号分隔列表。
var hl_calling_plan_bundle = $('input[name="cp_bundle"]:checked').getCheckboxVal() || "";
jQuery.fn.getCheckboxVal = function(){
var vals = [];
var i = 0;
this.each(function(){
vals[i++] = jQuery(this).val();
});
return vals;
}
如果我检查第一个和第三个复选框,将返回以下内容:
1,3
然后,我想运行一个测试,看看返回的变量中是否存在特定值(例如“3”)
但是,我无法使用以下内容超越变量的分割:
var aCallingBundle = hl_calling_plan_bundle.split(",");
这给出了错误:
hl_calling_plan_bundle.split is not a function
知道发生了什么事吗?
答案 0 :(得分:4)
hl_calling_plan_bundle
是一个数组。您必须对其使用数组操作,而不是字符串操作。
如果你想知道值3是否在数组中,那么你必须在数组中搜索它。有很多方法可以搜索数组,但由于你有jQuery,所以很容易使用.inArray()
函数:
var index = $.inArray(3, hl_calling_plan_bundle);
if (index != 1) {
// found 3 in the array at index
}
顺便提一下,您可能希望简化您的功能:
jQuery.fn.getCheckboxVal = function(){
var vals = [];
this.each(function(){
vals.push(this.value);
});
return vals;
}
或者这样:
jQuery.fn.getCheckboxVal = function(){
return(this.map(function(){return(this.value)}).get());
}
答案 1 :(得分:1)
split()
是一种String
方法,Array
上不存在。
当您说以下内容被返回1,3
时,您可能会隐式调用String
的{{1}}方法,默认情况下{{1}使用逗号的数组成员。如果您明确调用toString()
,然后,则可以调用join()
,但这将是反模式。
答案 2 :(得分:0)
您不需要拆分字符串,只需使用RegEx搜索:
var str = '1,3,22,5';
/\b1\b/.test(str); // true
/\b2\b/.test(str); // false
/\b3\b/.test(str); // true
/\b5\b/.test(str); // true
/\b22\b/.test(str); // true
使其成为一种功能:
String.prototype.findVal = function(val){
var re = new RegExp('\\b' + val + '\\b');
re.lastIndex = 0;
return re.test(this);
};
str.findVal(2); // false
str.findVal(22); // true
答案 3 :(得分:0)
要获取复选框:
var cbs = document.getElementsByName('cp_bundle');
获取所有值和已检查值的数组:
var allValues = [];
var checkedValues = [];
for (var i=0, iLen=cbs.length; i<iLen; i++) {
if (cbs[i].checked) checkedValues.push(cbs[i].value);
allValues[i] = cbs[i].value;
}