2009-06-24 16 views
0

Ich benutze JQuery 1.3.2-min in einem Projekt, um JavaScript-Animationen, Ajax usw. zu behandeln. Ich habe die Datei auf dem gleichen Server wie die Website gespeichert, anstatt Google zu verwenden. Wenn ich die Site lokal auf meinem Entwicklungscomputer betreibe, funktioniert alles in FF, IE, Opera und Safari (all die neuesten Versionen - ich arbeite von zu Hause aus und ich habe nur eine Maschine für den persönlichen Gebrauch und Entwicklung) außer für einige CSS Unterschiede zwischen ihnen und wenn ich zur Live-Site auf meiner Maschine gehe, funktioniert es auch gut. Ich habe meine Caches gelöscht und die Seite aktualisiert, und es funktioniert immer noch.JQuery/Javascript funktioniert on & off

Hier wird es aber interessant. Wenn ich die Site an meinen Chef sende, um in verschiedenen OS/Browser-Konfigurationen zu testen, funktioniert eine Seite nicht richtig, einige funktionieren, manche nicht. Außerdem hat der Kunde (der IE 8 benutzt) auch bestätigt, dass es nicht vollständig funktioniert - in der Tat hat er mir gesagt, dass die Seite für eine Stunde gut funktionieren wird, und dann einfach für eine Weile "abschalten". Ich habe noch nie zuvor von so etwas gehört, und Google macht nicht zu viel. Ich habe eine Ahnung, dass es teilweise mit JQuerys .data() sein kann, aber ich bin mir nicht sicher.

Die Seite ist im Grunde geschachtelt ungeordneten Listen, und drei grundlegende Aktionen passieren auf der Liste. Die oberste ungeordnete Liste wird auf "sichtbar" gesetzt (alle Listen über CSS sind so eingestellt, dass sie angezeigt werden: keine, um sie bei einer neuen Seitenanforderung verborgen zu halten); Alle Listenelemente divs erhalten eine Mauszeigeraktion mit voller Deckkraft und werden bei mouseoff auf 50% Deckkraft zurückgenommen. Wenn dann auf einen Absatz geklickt wird, wird die oberste ungeordnete Liste in diesem Listenelement angezeigt.

Hier ist meine Javascript-Datei für die Seite:

$(function() { 
    // Set first level ul visible 
    $('div#pageListing ul:first').css('display', 'block'); 

    // Disable all the hyperlinks in the list 
    $('div#pageListing li a').click(function() { 
     var obj; 
     obj = $(this).parent(0).parent('div:first'); 
     highlight(obj); 
     return false; 
    }); 

    // List Item mouse hovering 
    $('#pageListing li').hover(
      // Mouse On 
      function() { 
       if ($(this).children('div').attr('id') !== 'activePage') { 
        $(this).children('div').css('opacity', 1).css('filter', 
          'alpha(opacity=100)'); 
       } 
      }, // Mouse off 
      function() { 
       if ($(this).children('div').attr('id') !== 'activePage') { 
        $(this).children('div').css('opacity', 0.4).css('filter', 
          'alpha(opacity=40)'); 
       } 
      }); 

    // Active list item highlighting 
    $('#pageListing li div').click(function() { 
      highlight($(this)); 
     }); 

    // Sub-list expanding/collapsing 
    $('#pageListing p.subpageslink').click(function() { 
     // Get next list 
      var subTree = $(this).parent('div').next('ul'); 

      // If list is currently active, close it, else open it. 
      if (subTree.data('active') != true) { 
       subTree.data('active', true); 
       subTree.show(400); 
      } else { 
       subTree.data('active', false); 
       subTree.hide(400); 
      } 
     }); 

    // Double clicking of list item - edit a page 
    $('#pageListing li div').dblclick(function() { 
     var classes = $(this).attr('class'); 
     var classArray = classes.split(' '); 
     var pageID = classArray[1]; 
     editPage(pageID); 
    }); 

    // Handle button clicking 
    $('button#addPage').click(function() { 
     addPage(); 
    }); 

    $('button#editPage').click(function() { 
     var div = $('div#activePage'); 
     var classes = div.attr('class'); 
     var classArray = classes.split(' '); 
     var pageID = classArray[1]; 
     editPage(pageID); 
    }); 

    $('button#delPage').click(function() { 
     var div = $('div#activePage') 
     var classes = div.attr('class'); 
     var classArray = classes.split(' '); 
     var pageID = classArray[1]; 
     delPage(pageID); 
    }); 
}); 

// Highlighting of page when clicked 
function highlight(obj) { 
    // Get previous hightlighted element 
    // and un-highlight 
    var oldElement = $('div#activePage'); 
    oldElement.css('background', 'white'); 
    oldElement.css('opacity', 0.4).css('filter', 'alpha(opacity=40)'); 
    oldElement.removeAttr('id'); 

    // highlight current selection 
    obj.attr('id', 'activePage'); 
    obj.css('opacity', 1).css('filter', 'alpha(opacity=100)'); 
    obj.css('background', '#9dc0f4'); 

    // add appropiate action buttons 
    $('button.pageButton').css('display', 'inline'); 
} 

function addPage() { 
    window.location = "index.php?rt=cms/editPage"; 
} 

function delPage(page) { 

    var confirm = window.confirm("Are you sure? Any sub-pages WILL BE deleted also."); 

    if (confirm) { 
     var url = './components/cms/controller/forms/deletePage.php'; 
     $.ajax({ 
      url : url, 
      type : 'GET', 
      data : 'id=' + page, 
      success : function(result) { 
       if (!result) { 
        document.location = "index.php?rt=cms"; 
       } else { 
        window.alert('There was a problem deleting the page'); 
       } 
      } 
     }); 
    } 
} 

function editPage(page) { 
    var url = "index.php?rt=cms/editPage/" + page; 
    window.location = url; 
} 
+2

Nicht mit Ihrem Problem verbunden, aber ich finde es beunruhigend, dass Ihre Seite löschen mit einer GET-Anfrage funktioniert. Das ist nicht nur eine schlechte Übung, sondern verstößt auch gegen die HTTP-Spezifikation (http://www.w3.org/2001/tag/doc/whenToUseGet.html). Ich bitte Sie demütig, sie nur auf POST umzustellen;) –

+0

Einverstanden mit Peter B., es ist schlecht, weil es zu einfach ist, unbeabsichtigt zu einer URL zu navigieren und eine mögliche katastrophale Änderung im Backend zu verursachen, dies verhindert HTTP POST. – Peter

+0

Vielen Dank für den Punkt - ich dachte an HTTP-Traffic und dachte nicht an die möglichen URL-Probleme. –

Antwort

0

Vielen Dank für Ihre Anregungen. Das Endproblem war Missverständnis. Ich arbeite von zu Hause aus und lade meine Projekte auf einen SVN-Server hoch, mit dem der Chef dann den Live-Server aktualisiert. Irgendwie wurden die richtigen Dateien nicht aktualisiert - ein Kommunikationsfehler meinerseits. Ein anderer möglicher Grund war, dass die Seite, während sie XHTML 1.0 Strict deklariert wurde, ungefähr 50 Validierungsfehler aufwies (das meiste falsch verschachtelte UL), und ich habe das bis zu 5 Fehlern bereinigt. Vielen Dank, aber auch ein trauriges Beispiel für die Bedeutung der Teamarbeit.

0

Ist es möglich, dass Sie eine Verknüpfung zu (einige) die Skriptdateien ein src verwenden, die auf der lokalen Festplatte/HDD auf eine Datei zeigt? Wenn ja, würde das erklären, warum es nur auf Ihrem Computer funktioniert, da dann nur Ihr Computer Zugriff auf die Skriptdatei hat.

+0

Nein, fast alle Links im Projekt (Ein eigenständiges MVC-Framework) sind relativ zur Dateistruktur des Frameworks. Außerdem funktionieren einige der Funktionen und die Arbeitselemente benötigen auch JQuery, also würde ich annehmen, dass sie geladen werden, damit diese Teile funktionieren. –