2012-02-21 15 views
6

Estoy tratando de ejecutar esta función, que toma todos los valores de casilla de verificación en una cadena separada por comas, y convierte "," en ", ", por lo que se lee mejor. El problema es que estoy recibiendo un error extraño: diceEl objeto no tiene el método 'reemplazar'

$('.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); 
}); 

El error de la consola:

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

ahora no recibo el cuadro de alerta.

Esto es un poco más allá de mí, ¿alguien puede explicar lo que estoy haciendo mal?

+1

'replace'-method solo puede usarse para cadenas, no para' Array'-object. Crea un ciclo para reemplazar valores reales en 'all_boxes_values'. – Teemu

Respuesta

11

Aunque alert(some_array) imprime una representación de cadena de la matriz, la matriz en sí no es una cadena. Por lo tanto, no tiene .replace. alert está obligado a convertirlo en una cadena porque el cuadro de alerta solo puede mostrar caracteres.

Simplemente puede unirse utilizando un separador personalizado. join es una función de arrays:

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

Como una nota, recomiendo console.log sobre alert porque:

  1. muestra el objeto/matriz real en lugar de una representación de cadena (especialmente útil con objetos, en vez de lo inútil [object Object] que recibe con alert)
  2. se libera de cerrar la ventana emergente cada vez
  3. rastrea los otros registros de modo que y ou tener un registro real de registros de
+0

Perfecto, gracias por la explicación también :) – TheCarver

+0

Hola @pimvdb, ¿Podría usted pleaz responder a esta pregunta http://stackoverflow.com/questions/22653866/has-no-method-replace-with-jquery-flot-tooltip- js Gracias – sunil

4

all_boxes_values es una matriz, no una cadenas y por lo tanto no tiene método replace.

Trate

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

Si insiste en la realización de las expresiones regulares, convertir un arreglo a cadena primero: all_boxes_values.toString().

Cuestiones relacionadas