2012-05-22 21 views
5

Tôi đang làm việc trên một dự án yêu cầu tôi có thể lấy html từ trang và chèn nó vào trang web chính. Nó hoạt động hoàn toàn trong Chrome và Firefox, nhưng nó không thành công trong IE 9. Đây là một đoạn mã được cắt ra khỏi mã mà tôi sử dụng.Vấn đề IE9: Nút tùy chọn được tạo động (thông qua innerHTML) và các hộp kiểm không hoạt động

if (!element.data('cache')) { 

     $('#contentHolder').html('<img src="ajax_preloader.gif" width="64" height="64" class="preloader" />'); 

     $.get(element.data('page'), function (msg) { 
     $('#contentHolder').html(msg); 

     /* After page was received, add it to the cache for the current hyperlink: */ 
      element.data('cache', msg); 
      setTimeout("checkonbox()", 100); 
     }); 
    } 
    else { 
     $('#contentHolder').html(element.data('cache')); 
     setTimeout("checkonbox()", 100); 
    } 

HTML được tiêm là

<table style="width:400px; height: 388px; text-align: left;" align="left"> 
<tr> 
<td><input id="Checkbox0" type="checkbox" onclick="changebuttons();" checked="true"> 
Exclusive.</input></td> 
</tr> 
</table> 

Thêm một số nút tùy chọn hơn.

Mọi thứ xuất hiện hoàn hảo, nhưng tôi không thể nhấp vào hộp kiểm hoặc các nút tùy chọn.

+0

Chức năng changebuttons() của bạn làm gì? Điều này dường như là nguyên nhân có thể gây ra sự cố. Một điều cần kiểm tra là phiên bản jquery - đã có một số lỗi với IE9 và các phiên bản cũ hơn của jquery. – FluffyKitten

+0

Lưu ý phụ - bạn không cần phải kết thúc 'changebuttons()' với một ';', vì bạn không làm bất cứ điều gì sau khi cá tuyết. chỉ là một mẹo, không có gì nghiêm trọng. – Ohgodwhy

+0

Tôi đang sử dụng jquery 1.7.2. Tôi cũng chỉ thấy rằng sự kiện onclick đang hoạt động; hộp kiểm chỉ không thay đổi. Tôi đã bao gồm những điều sau đây vào đầu hàm changebuttons của tôi 'if (navigator.appName == 'Microsoft Internet Explorer') { document.getElementById ('Checkbox0'). Checked = 1 - document.getElementById ('Checkbox0').đã kiểm tra; } 'và nó hoạt động hoàn hảo. – Urza

Trả lời

0

Tôi không thể xem mã hoàn chỉnh trong câu hỏi của bạn. Nhưng tôi giả định rằng bạn không đặt mã bên trong bộ khởi tạo:

$(function() { 
     // your jQuery code here. 
    }); 

Điều này sẽ giúp trình duyệt khởi tạo sự kiện liên quan đến các thành phần của nó. Hãy thử điều này và kiểm tra xem có thay đổi nào xảy ra không.

Cũng cố gắng loại bỏ nếu có bất kỳ lỗi nào trên javascript. Cố gắng gỡ lỗi với trình duyệt có sẵn. Trình gỡ lỗi javascript tốt nhất mà tôi từng gặp là FireBug, là một addon firefox.

0

Tôi chưa bao giờ thấy thẻ đầu vào được viết như thế. Tôi chưa có cà phê buổi sáng của mình, nhưng tôi khá chắc chắn rằng nó phải tự đóng, trong trường hợp đó tôi sẽ không ngạc nhiên khi thấy IE vạch ra những gì bạn có ở đó.

Tôi đoán ý tưởng là đặt "Độc quyền". nhãn có thể nhấp, trong trường hợp này bạn muốn có thẻ nhãn xung quanh đầu vào của mình, như sau:

<label for="Checkbox0"><input id="Checkbox0" type="checkbox" onclick="changebuttons();" checked="true" />Exclusive.</label> 

Cho một vòng xoáy.

+0

cách khác là có thể chỉ định thuộc tính 'for' trong thẻ nhãn, vì vậy sẽ không cần phải đính kèm đầu vào vào nhãn – vittore

+0

Có tất nhiên! Cái này là thừa trong mã đó. Thất bại ... Biết tôi nên uống cà phê đó. –

0

mọi thứ được thêm động vào dom sẽ phải có các hành động được liên kết với nó sau khi được tải vào trang. Chỉ cần thả mã trong thông qua AJAX sẽ không làm cho nó chạy.

thử làm điều này trong chức năng của bạn:

$.get(element.data('page'), function (msg) { 
     $('#contentHolder').html(msg); 

     //this will bind your input field via javascript 
     $('input#Checkbox0').click(changebuttons); 

     /* After page was received, add it to the cache for the current hyperlink: */ 
      element.data('cache', msg); 
      setTimeout("checkonbox()", 100); 
}); 
0

Thay

element 

với

$(element) 

nó sẽ làm việc.

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