2012-02-21 87 views
6

我试着运行这个函数,它将所有选中的复选框值截取为逗号分隔的字符串,并将","转换为", ",所以它读得更好。问题是,我得到一个奇怪的错误:对象没有方法'替换'

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

控制台错误说:

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

我没有收到警告框。

这有点超出我了,谁能解释我做错了什么?

+1

'replace'-method只能用于字符串,不能用于'Array'对象。创建一个循环来替换'all_boxes_values'中的实际值。 – Teemu 2012-02-21 21:58:12

回答

11

虽然alert(some_array)打印数组的字符串表示,但数组本身不是字符串。因此,它没有.replacealert被迫将其转换为字符串,因为警告框只能显示字符。

虽然您可以简单地使用自定义分隔符进行连接。 join是阵列的一个函数:

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

作为边注,我建议console.logalert,因为它:

  1. 示出了实际的对象/数组代替的字符串表示(与对象,而不是特别有用的无用[object Object]您收到alert
  2. 免费从每次关闭弹出
  3. 跟踪其他日志,以便y OU有日志的实际日志
+0

完美,谢谢你的解释太:) – TheCarver 2012-02-21 21:59:13

+0

嗨@pimvdb, 你可以恳求回答这个问题http://stackoverflow.com/questions/22653866/has-no-method-replace-with-jquery-flot-tooltip- js 谢谢 – sunil 2014-03-26 07:23:03

4

all_boxes_values是一个数组,而不是一个字符串,因此它没有replace方法。

尝试

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

如果你坚持执行正则表达式,转换数组字符串第一:all_boxes_values.toString()