Acties:
  • 0 Henk 'm!

  • TheRzr
  • Registratie: Juli 2009
  • Laatst online: 19-08 21:12
Laatste weken ben ik bezig geweest een groot probleem op IE7/8 op te lossen. Ik werk momenteel met jQuery 1.2.6 (Drupal) en ik gebruik de .clone() functie gevolgd door meerdere .append() functies.

Ik ben bezig met een carrousel met plaatjes, waarin de verscheidene plaatjes vijf keer gekopieerd worden. Aan deze plaatjes zitten twee events gekoppeld namelijk, mouseover en click Deze plaatjes hebben een '.mouseover()' en een '.click()' event. Wanneer ik .clone() gebruik en alles met .append() aan elkaar plak, ziet het er goed uit in FF, Chrome en Safari. Maar in IE7/8 werkt het duidelijk niet.

Concluderend zijn er 2 problemen na die acties:

1.De imageslider wordt vijf keer gekopieerd en IE laat alleen de eerste zien die gekopieerd is.De andere drie zijn wel zichtbaar aangemaakt in de source code maar niet op het scherm. In de functie zit een onderdeel dat de correcte width waarde berekend en toepast op de div. Jammer genoeg, gebeurd dat wel in andere browsers maar niet in IE.

2.
Een nog belangrijker probleem is eigenlijk: dat bij de carrousel die al een keer gekopieerd is, ook de events niet gekopieerd worden. In IE ontwikkel tools zie ik dat het jQuery1232434 (elk nummer mogelijk) attribuut als waarde op 'null' staat in de diepte naar alle children elementen. En ja ik heb .clone(true) gebruikt.

Ik zou niet weten waar het probleem uberhaupt zit, en dus weet ik ook niet hoe het op te lossen is. Hieronder de source code voor het kopieren en aankoppelen:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
  if (width > 1280)

        {

            var newWidth;

            //Copy content of scrolling div

            var thumbImages = $("div").clone();

            

            for (var i = 0; i < 4; i++)

            {

                var lefArrCount = 1;

                thumbImages.children().each(function()

                {

                    //Change left values from images

                    newWidth = width * (i + 1);

                    var cssLeft = leftArray[lefArrCount] + newWidth;

                    $(this).css("left", cssLeft+'px');

                    lefArrCount++;

                });

                lefArrCount = 1;

                 

                 //Append code, IE fails on taken over handlers (also with .clone(true))

                $("div").append(thumbImages[0].innerHTML);

            }

 

            //Edit total width (IE fails and sets the width to width * 2)

            $('div').css("width", (newWidth + width));

        }

        

        //Add the srcolling functionality on the DIV.

        $(function() {

            $("div").smoothDivScroll({

                scrollingSpeed: 12, 

                mouseDownSpeedBooster: 3

            });

        });

}

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 10-09 08:45
Heb je een testcase? Wat zijn je eigen debug-ervaringen? (bijvoorbeeld is die newWidth wel goed gevuld in IE?)

Acties:
  • 0 Henk 'm!

  • TheRzr
  • Registratie: Juli 2009
  • Laatst online: 19-08 21:12
Die newWidth is al getest d.m.v. alert boxes in IE voor en na alle berekeningen.

totalWidth = newWidth + width
alert(totalWidth);
$('div').css("width", (newWidth + width));
alert(totalWidth);
Deze alert geeft tweemaal de correcte waarde terug zoals gewenst is, maar bij de toekenning gaat iets mis in enkel IE.

Ook harde getallen, zoals de waarde die gewenst is, mocht niet baten. Bij bijvoorbeeld het getal 16.000 als width hard toekennen wilde het ook niet lukken.

Verder zijn er een hoop andere test situaties geprobeerd, met een negatief resultaat als gevolg.

Acties:
  • 0 Henk 'm!

  • Kiphaas7
  • Registratie: Februari 2005
  • Laatst online: 00:09
Niet echt perse een oplossing, maar 1.2.6 is al behoorlijk verouderd. Er bestaat een module die je jquery update naar 1.3.2

http://drupal.org/project/jquery_update

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 10-09 08:45
Tenzij je een Drupal 5 installatie gebruikt.

Gelukkig gaan ze dit "systeem" in Drupal 7 enigszins verbeteren, want het is natuurlijk te belachelijk voor woorden dat je door een CMS vastzit aan een verouderde Javascript-library.