2010-02-28 37 views
20

Tôi có mã sau đây và hoạt động của nó (như thường lệ) trong mọi thứ trừ IE. Nó cho tôi một cuộc gọi bất ngờ đến phương thức hoặc truy cập thuộc tính trong Jquery và tôi không biết làm thế nào để gỡ lỗi nó. Tôi đã sử dụng thanh công cụ dành cho nhà phát triển IE, điều này vô dụng đối với lỗi này và chỉ cung cấp cho tôi một dòng 12 (bên trong tập lệnh jquery).Lỗi IE Javascript: cuộc gọi bất ngờ đến phương thức hoặc quyền truy cập thuộc tính

Any help is v nhiều đánh giá cao:

<script type="text/javascript"> 
$(document).ready(function() { 

    $.history.init(pageload); 

    $('a[href=' + window.location.hash + ']').addClass('selected'); 

    $('a[rel=ajax]').click(function() { 

     var hash = this.href; 
     hash = hash.replace(/^.*#/, ''); 
     $.history.load(hash); 

     $('a[rel=ajax]').removeClass('selected'); 
     $(this).addClass('selected'); 
     $('.loading').show(); 

     getPage(); 

     return false; 
    }); 
}); 

function pageload(hash) { 
    if (hash) getPage(); 
} 

function getPage() { 

    hash = document.location.hash; 
    hash = hash.replace(/^.*#/, ''); 
    var data = 'page=' + encodeURIComponent(hash); 
    $.ajax({ 
     url: "index.php", 
     type: "POST", 
     data: data, 
     cache: false, 
     success: function (html) { 
      $('.loading').hide(); 
      $('tbody').html(html); 

     } 
    }); 
} 
</script> 

Đây là plugin lịch sử: http://plugins.jquery.com/project/history

Và đây là bản demo tôi đã được như sau: http://plugins.jquery.com/project/history

Tuy nhiên thay đổi window.location quay lại document.location dường như không tạo ra sự khác biệt

Im lost o n cái này Khi tôi thay đổi thẻ im gọi cho nó không đăng để làm việc của nó, nhưng trong nghĩa là thiết kế là tất cả bị hỏng và các liên kết tiếp theo tôi bấm vào không đăng bài. Thực sự tuyệt vời !!, hoạt động tốt trong FF, opera v.v.

Trả lời

8

Tôi hơi ngạc nhiên khi IE phàn nàn về nó, nhưng đó là một điều tốt: Bạn đang thiếu một tuyên bố trong getPage cho hash (ví dụ: đặt var trước lần sử dụng đầu tiên). Trên các sản phẩm khác, có lẽ là tạo ra một toàn cầu tiềm ẩn (một tài sản của đối tượng window được gọi là hash), tất nhiên là Bad Thing (tm), nhưng tôi hiểu nó đúng theo đặc điểm kỹ thuật (các phần liên quan đang được 8.7 ["Tham chiếu Loại"] và 10.1.4 ["Chuỗi phạm vi và độ phân giải định danh"]).

Tuy nhiên, IE vẫn còn phàn nàn về điều đó. Nó phải có liên quan đến phạm vi mà jQuery đang gọi trình xử lý nhấp chuột của bạn.

+0

ive thu hẹp nó xuống thẻ tbody. Bất kỳ ý tưởng tại sao điều này gây ra sự cố? IE có nhận ra thẻ này không? PS Thx bạn đã đúng về những điều bạn đã đề cập cũng như –

+1

@Ke: IE nhận ra thẻ 'tbody', vâng. Tôi vừa mới nhận ra rằng bạn đang làm '$ ('tbody'). Html (html)' - làm * thực sự * muốn viết nội dung này vào mọi 'tbody' trên trang? Và HTML bạn đang viết cho nó là gì? Có lẽ là một loạt các phần tử 'tr' ... IE không giống như bạn mucking về với các hàng trong bảng thông qua' innerHTML', nhưng tôi cho rằng jQuery đang xử lý cho bạn (Prototype làm và tôi không nghĩ jQuery là lạc hậu hơn trong khu vực đó, nhưng tôi không biết jQuery tốt). –

0

tôi không thể tìm thấy một phương pháp lịch sử trong jQuery API vì vậy tôi đoán nó là một trong hai:

  • Một plugin của bên thứ ba.
  • Cuộc gọi gián tiếp đến đối tượng cũ window.history.
  • Đối tượng tùy chỉnh bạn đã tạo.

tôi đoán là IE (nổi tiếng với những ô nhiễm phạm vi toàn cầu bằng cách làm tất cả mọi thứ toàn cầu) cho rằng bất kỳ tài liệu tham khảo để lịch sử thực sự có nghĩa window.history và nó nhận được nhầm lẫn. Nếu đó là một đối tượng tùy chỉnh, hãy thử đổi tên nó thành myHistory hoặc bất kỳ thứ gì khác.

+0

tôi đã làm tất cả điều này và plugin lịch sử này có vẻ hơi bị hỏng. cũng có vấn đề với hơn 50 ký tự trong url, nghĩ rằng tôi sẽ phải tìm cách khác, hãy cổ vũ :) –

0

Tôi nghĩ rằng ông Crowder là một thứ gì đó. Theo như tôi có thể nói từ nguồn jQuery, nếu đoạn HTML trả về của bạn không chứa bất kỳ thẻ <script> và không có một số đặc điểm không quá khác, thì jQuery có thể đang cố gắng đưa nó vào <tbody> phần tử bằng cách sử dụng thuộc tính "innerHTML". IE không thích điều đó.

Những gì bạn có thể phải làm là quấn toàn bộ <table> vào một giả <div> và sau đó xây dựng lại toàn bộ nội dung từ đoạn HTML của bạn.

4

Nó sẽ là:

$('tbody').html(html); 

IE ném một lỗi khi bạn cố gắng để đưa những điều nhất định trong một số nút. Ví dụ:

$('<input>').append('</p>') 

Để khắc phục điều này, hãy thêm html vào phần tử khác. Ví dụ, bạn có thể thử:

$('table').html('<tbody>' + html + '</tbody>'); 
6

NẾU bạn nhận được lỗi này khi sử dụng các yếu tố HTML5 trong IE, chắc chắn rằng bạn đang sử dụng html5shim nói với IE rằng đây là những yếu tố thực sự.

+0

[Modernizr] (http://modernizr.com) cũng có thể được sử dụng vì nó chứa [html5shim] (http : //code.google.com/p/html5shiv/). – zacharydl

0

Tôi gặp sự cố này trong ứng dụng web sử dụng các phần tử HTML5. Khi tôi đưa kịch bản Modernizr vào các trang, vấn đề đã được giải quyết.

0

Tôi cũng gặp vấn đề tương tự. Ban đầu có một danh sách lựa chọn đã được thêm vào nó. Trên đường đi, lựa chọn đã được thay đổi thành trường nhập. Cố gắng gắn thêm thẻ tùy chọn vào trường nhập dường như làm cho IE không hài lòng.

0

Tôi đã gặp sự cố tương tự ngay bây giờ. Dường như với tôi rằng nó xảy ra cho các yếu tố không nhìn thấy được. Xác minh xem phần tử của bạn có hiển thị tại thời điểm gọi số .html() trên đó hay không.

0

Bạn có đặt bất kỳ trường nhập nào không?

Tôi gặp vấn đề tương tự, lặp qua một mảng giá trị, nhưng tôi đã thay đổi hộp văn bản thành đầu vào. Chrome chỉ bỏ qua nó, nhưng IE 8 lại bị thổi phồng.

$("#someID").html("someValue") = boom! trên IE 8 nếu someID là một đầu vào

Đã có cuộc gọi val, nhưng cần thiết để loại bỏ html.

$("#someID").val("someValue") = tốt

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