2012-06-09 36 views
5

Sau đây sẽ đọc một hộp cảnh báo đọc: 211466719468855300. Tại sao điều này xảy ra, ngay cả khi tôi thử đúc nó vào một String? Làm thế nào tôi có thể đọc nó một cách chính xác?Dừng Javascript từ làm tròn số ID lớn

HTML:

<a class="delete-link" data-id="211466719468855298">Delete</a>​ 

JS:

$('.delete-link').click(function(e) { 
     var $item =$(this); 
     var itemID = String($item.data('id')); 
     alert(itemID); 
}); 

Fiddle:http://jsfiddle.net/zUbym/1/

Trả lời

8

Nó đang xảy ra vì hai lý do:

  1. jQuery làm bạn ủng hộ chuyển đổi "đĩa dữ liệu" giá trị thuộc tính với các loại "phù hợp" của bạn
  2. số đó lớn không thể được đại diện chính xác trong JavaScript, bởi vì tất cả các số là 64 -bit IEEE 794 giá trị dấu phảy động.

Nếu bạn nhận được giá trị thuộc tính với ".attr()" trực tiếp, bạn có thể tránh chuyển đổi số, nhưng bạn sẽ phải giữ chuỗi đó. Ngoài ra, bạn có thể thêm tiền tố cho các giá trị dữ liệu của bạn với một số ký tự không phải chữ số ("_" hoặc bất kỳ thứ gì) để giữ cho jQuery không thể cố gắng giúp bạn.

+2

+1 nếu đó là cách anh ấy đang có lợi - không, cảm ơn. –

+0

Pointy- Đó là một số hành vi ngớ ngẩn - cảm ơn vì cách giải quyết – Yarin

+0

@RoyiNamir cũng rất tiện khi các thuộc tính "data-" của bạn trông giống như JSON, nhưng tôi đồng ý đó là một tính năng đáng ngờ. – Pointy

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