2009-02-23 10 views
5

tworzę pewne elementy kratka po locie z jQuery i dołączanie ich do węzła jak taktworzenia elementów kratka po locie z jQuery - dziwne zachowanie IE

var topics = ['All','Cat1','Cat2']; 
var topicContainer = $('ul#someElementId'); 

$.each(topics, function(iteration, item) 
{ 
    topicContainer.append(
     $(document.createElement("li")) 
     .append(
      $(document.createElement("input")).attr({ 
       id: 'topicFilter-' + item 
       ,name: item 
       ,value: item 
       ,type: 'checkbox' 
       ,checked:true 
      }) 
      .click(function(event) 
      { 
       var cbox = $(this)[0]; 
       alert(cbox.value); 
      }) 
     ) 
     .append(
      $(document.createElement('label')).attr({ 
       'for': 'topicFilter' + '-' + item 
      }) 
      .text(item) 
     ) 
    ) 
}); 

Problemy ja napotykają są dwa -fold (są tylko w IE)

  • Pola wyboru są dodawane do strony, ale ich domyślny zaznaczony stan jest odznaczony, gdy określam "true" dla tej wartości. (Testowanie z "sprawdzone" dla wartości nie ma znaczenia)
  • Po wykonaniu alert(cbox.value); wyjście jest "włączone", za każdym razem.

Myślę, że głównym problemem jest tutaj, że potrzebuję lepszego sposobu na ustawienie domyślnego stanu zaznaczonych pól wyboru i ustawienie domyślnego atrybutu "wartość". Ale jeszcze nie znalazłem innej drogi.

Uwaga: cały ten kod działa poprawnie w przeglądarkach Firefox i Chrome.

To jQuery 1.3.1 Testy z IE 7.0.5730.11

Odpowiedz

14

Internet Explorer nie lubi pozwalają zmienić sprawdzenia wartości wejścia, które nie jest częścią DOM. Spróbuj ustawić sprawdzoną wartość PO dodaniu przedmiotu i sprawdź, czy to działa.

+0

To się zgadza. Właśnie to potwierdziłem kilkoma testami. –

+0

Mam napotkany ten problem niezliczoną ilość razy w IE. Cieszę się, że rozwiązał problem. –

+0

to sprawiło, że mój dzień, dzięki –

2

I ponownie wykorzystane niektóre kodu i mieli podobny problem jak na

Why does order of defining attributes for a dynamically created checkbox in jquery affect its value?

znalazłem rozdzielczości po prostu przesunąć deklarację atrybutu

type: 'checkbox', 

do początku czyli:

$(document.createElement("input")).attr({ 
type: 'checkbox', 

Ten problem wystąpił we wszystkich przeglądarki dla mnie, więc nie sądzę, jego problem IE, ale raczej jquery "rzeczy". Dla mnie to nie miało znaczenia, kiedy ustawię wartość (przed lub po) dołącz. Różnica polegała na tym, jak szybko/gdzie zadeklarowałem typ danych wejściowych.

+0

+1 dobry, miałem ten sam problem, który naprawił to – Bart

1

Zaznaczony checkbox "sprawdzony" atrybut nie ma stanu "prawda", ma stan "sprawdzony". Zwykle dodam elementy do DOM z jQuery za pomocą:

var el = $('<input type="checkbox" id="topicFilter-' + '"' 
     + ' checked="checked" />'); 
$(topicContainer).append(el); 

WIĘCEJ czytelna, IMO, brzmi jak HTML. Będę przeklęty, jeśli to nie zadziała w IE, robię to w ten sposób od lat.