2012-05-22 5 views
5

Pracuję nad projektem, który wymaga ode mnie możliwości pobrania html ze strony i wstawienia go na stronę główną. Działa całkowicie w przeglądarce Chrome i Firefox, ale kończy się niepowodzeniem w IE 9. Oto fragment kodu, którego używam.Kwestia IE9: Dynamicznie utworzone (poprzez innerHTML) przyciski opcji i pola wyboru nie działają

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 jest wstrzykiwany jest

<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> 

Plus kilka przyciski opcji.

Wszystko wygląda idealnie, ale nie mogę kliknąć pola wyboru ani przycisków opcji.

+0

Do czego służy funkcja changebuttons()? Wydaje się, że jest to najbardziej prawdopodobna przyczyna problemu. Kolejną rzeczą do sprawdzenia jest wersja jquery - pojawiły się błędy w IE9 i starszych wersjach jquery. – FluffyKitten

+0

Notatka boczna - nie musisz kończyć 'changebuttons()' znakiem ';', ponieważ nic nie robisz po dorsze. tylko wskazówka, nic poważnego. – Ohgodwhy

+0

Używam jquery 1.7.2. Właśnie stwierdziłem, że zdarzenie onclick działa; pole wyboru po prostu się nie zmienia. Włączyłem następujące elementy na górze mojej funkcji changebuttons 'if (navigator.appName == 'Microsoft Internet Explorer') { document.getElementById ('Checkbox0'). Checked = 1 - document.getElementById ('Checkbox0').sprawdzone; } 'i działa idealnie. – Urza

Odpowiedz

0

Nie widzę całego kodu w pytaniu. Ale jestem przy założeniu, że nie umieścić kod wewnątrz inicjatora:

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

Pomoże przeglądarkę, aby zainicjować związane z jego elementów wydarzenia. Wypróbuj to i sprawdź, czy nastąpią jakieś zmiany.

Spróbuj również wyeliminować, jeśli wystąpi błąd w javascript. Spróbuj debugować za pomocą dostępnej przeglądarki. Najlepszym debuggerem javascript, jaki kiedykolwiek spotkałem, jest FireBug, który jest dodatkiem firefox.

0

Nigdy nie widziałem takiego znacznika wejściowego. Nie miałem jeszcze porannej kawy, ale jestem prawie pewien, że powinno to być samozamykanie, w którym to przypadku nie byłabym zaskoczona, widząc, jak IE rzuca palenie na to, co tam masz.

Domyślam się, że pomysł polegał na wybraniu opcji "Wyłącznie". Etykieta klikalny, w którym to przypadku chcesz tag etykiety wokół wejścia, coś takiego:

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

Daj że wiru.

+0

alternatywnie możliwe jest określenie atrybutu 'for' w znaczniku etykiety, więc nie byłoby potrzeby dołączania danych wejściowych do etykiety – vittore

+0

Tak, oczywiście! Wartość for jest zbędna w tym kodzie. Fail ... Wiedziałem, że powinienem był dostać kofeinę. –

0

wszystko, co jest dynamicznie dodawane do domeny, będzie musiało zawierać powiązane z nią działania po załadowaniu na stronę. Upuszczenie kodu za pośrednictwem AJAX nie spowoduje uruchomienia.

spróbować zrobić to w swojej funkcji:

$.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

Wymień

element 

z

$(element) 

będzie działać.

Powiązane problemy