Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Object has no method 'replace'

I'm try to run this function, which grabs all the checked checkbox values in to a comma separated string, and converts "," in to ", ", so it reads better. The problem is I'm getting a strange error:

$('.name_boxes').live('click', function() {
    var all_boxes = $('.name_boxes');
    var all_boxes_values = []
    for (var i = 0; i < all_boxes.length; i++) {
        if (all_boxes[i].checked) {
            all_boxes_values.push(all_boxes[i].value)
        }
    }
    var all_boxes_values_clean = all_boxes_values.replace(/,/g,", ");
    alert(all_boxes_values_clean);
});

The console error says:

Uncaught TypeError: Object Aaron Ramsey,Aaron Renfree has no method 'replace'.

I'm not getting the alert box.

This is a bit beyond me, can anybody explain what I'm doing wrong?

like image 759
TheCarver Avatar asked Feb 21 '12 21:02

TheCarver


1 Answers

Although alert(some_array) prints a string representation of the array, the array itself is not a string. Thus, it does not have .replace. alert is forced to convert it into a string because the alert box can only show characters.

You can simply join using a custom separator, though. join is a function of arrays:

var all_boxes_values_clean = all_boxes_values.join(", ");

As a side note, I recommend console.log over alert because it:

  1. shows the actual object/array instead of a string representation (especially useful with objects instead of the useless [object Object] you receive with alert)
  2. frees you from closing the popup each time
  3. keeps track of other logs so that you have an actual log of logs
like image 59
pimvdb Avatar answered Oct 05 '22 20:10

pimvdb