2012-02-21 27 views
6

Tôi cố gắng chạy hàm này, lấy tất cả các giá trị hộp kiểm đã chọn trong chuỗi được phân cách bằng dấu phẩy và chuyển đổi "," thành ", ", vì vậy nó đọc tốt hơn. Vấn đề là tôi nhận được một lỗi lạ:Đối tượng không có phương thức 'thay thế'

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

Các lỗi giao diện điều khiển nói:

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

tôi không nhận được hộp cảnh báo.

Đây là một chút ngoài tôi, ai có thể giải thích những gì tôi đang làm sai?

+1

Phương thức 'replace' chỉ có thể sử dụng cho chuỗi, không chỉ cho đối tượng' Array'. Tạo một vòng lặp để thay thế các giá trị thực trong 'all_boxes_values'. – Teemu

Trả lời

11

Mặc dù alert(some_array) in biểu diễn chuỗi của mảng, bản thân mảng không phải là một chuỗi. Do đó, nó không có .replace. alert buộc phải chuyển đổi thành chuỗi vì hộp thông báo chỉ có thể hiển thị các ký tự.

Mặc dù vậy, bạn chỉ có thể tham gia bằng dấu phân cách tùy chỉnh. join là một chức năng của mảng:

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

Là một mặt lưu ý, tôi khuyên bạn nên console.log qua alert vì nó:

  1. cho thấy các đối tượng thực tế/mảng thay vì một chuỗi đại diện (đặc biệt hữu ích với các đối tượng thay vì của số điện thoại vô dụng [object Object] mà bạn nhận được với alert)
  2. giải phóng bạn khỏi đóng cửa sổ bật lên mỗi lần
  3. theo dõi các nhật ký khác để y ou có nhật ký nhật ký thực tế
+0

Hoàn hảo, cảm ơn lời giải thích quá :) – TheCarver

+0

Xin chào @pimvdb, Bạn có thể giải thích câu hỏi này http://stackoverflow.com/questions/22653866/has-no-method-replace-with-jquery-flot-tooltip- js Cảm ơn – sunil

4

all_boxes_values là một mảng, không phải là một chuỗi và do đó nó không có phương pháp replace.

Hãy thử

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

Nếu bạn nhấn mạnh vào thực hiện biểu thức thông thường, chuyển đổi một mảng chuỗi đầu tiên: all_boxes_values.toString().

Các vấn đề liên quan