user460114
user460114

Reputation: 1869

jquery split() issue

Hopefully this is easy for someone.

I have a set of checkboxes with values 1,2,3 etc with the same name attribute (cp_bundle).

I use the following code to get a comma-delimited list of those checkboxes.

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;
}

if I check the first and third checkboxes, the following will be returned:

1,3

Then, I want to run a test to see whether a particular value (e.g. "3") exists in the the returned variable

But, I can't get past the split of the variable using the following:

var aCallingBundle = hl_calling_plan_bundle.split(",");

This gives the error:

hl_calling_plan_bundle.split is not a function

Any idea what's going on?

Upvotes: 1

Views: 181

Answers (4)

RobG
RobG

Reputation: 147523

To get the checkboxes:

var cbs = document.getElementsByName('cp_bundle');

To get arrays of all values and the checked values:

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;
}

Upvotes: 0

vol7ron
vol7ron

Reputation: 42179

You don't need to split the string, you can just use RegEx to search:

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

Making it a function:

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

Upvotes: 0

jfriend00
jfriend00

Reputation: 708146

hl_calling_plan_bundle is an array. You have to use array operations on it, not string operations.

If you want to know if the value 3 is in the array, then you have to search the array for it. There are many ways to search an array, but since you have jQuery, it's easy to use the .inArray() function:

var index = $.inArray(3, hl_calling_plan_bundle);
if (index != 1) {
    // found 3 in the array at index
}

Incidentally, you may want to simplify your function like this:

jQuery.fn.getCheckboxVal = function(){
    var vals = [];
    this.each(function(){
        vals.push(this.value);
    });
    return vals;
}

or this way:

jQuery.fn.getCheckboxVal = function(){
    return(this.map(function(){return(this.value)}).get());
}

Upvotes: 4

alex
alex

Reputation: 490647

split() is a String method, it does not exist on an Array.

When you say the following is returned 1,3, you may be implicitly calling the String's toString() method, which will by default join() the array members with a comma. If you explicitly called toString(), then you could call split(), but that would be an anti pattern.

Upvotes: 1

Related Questions