2009-06-24 54 views
0

我在項目中使用JQuery 1.3.2-min來處理JavaScript動畫,ajax等。我將該文件存儲在與網站相同的服務器上,而不是使用Google。當我在我的開發機器上本地運行網站時,在FF,IE,Opera和Safari(所有最新版本 - 我在家工作,我只有一臺機器供個人使用和開發使用)中一切正常,除了一些CSS他們之間的差異,當我去我的機器上的現場,它也可以正常工作。我清除了緩存並且很難刷新頁面,並且仍然有效。JQuery/Javascript的作品開啓和關閉

然而,這是令人感興趣的地方。當我把這個站點發送給我的老闆去測試各種操作系統/瀏覽器配置時,一個頁面無法正常工作,其中一些工作正常,一些則不正常。此外,客戶(使用IE 8)也確認它不完全工作 - 事實上,他告訴我,該頁面可以正常工作一個小時,然後「關閉」一段時間。我以前從來沒有聽說過這類事情,谷歌也沒有變得太多。我有一種預感,它可能部分與JQuery的.data(),但我不知道。

該頁面基本上是嵌套無序列表,並且三個基本操作發生在列表上。 最上面的無序列表被設置爲可見(所有通過css的列表被設置爲顯示:無以使它們隱藏在新的頁面請求上);所有列表項目div都會在mouseon上獲得完全不透明的懸停動作,並在mouseoff上消失50%的不透明度;然後在單擊段落時,將顯示該列表項中最頂端的無序列表。

下面是頁面我的JavaScript文件:

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

與你的問題沒有關係,但是我覺得你的刪除頁面使用GET請求是令人擔憂的。這不僅是一種不好的做法,它實際上違反了HTTP規範(http://www.w3.org/2001/tag/doc/whenToUseGet.html),我虛心地要求你僅將它切換到POST;) – 2009-06-24 17:46:32

+0

同意彼得B.,這很糟糕,因爲它太容易無意中導航到一個URL並導致後端潛在的災難性變化,HTTP POST阻止了這一點。 – Peter 2009-06-24 17:52:36

回答

0

謝謝大家的建議。最終的問題是溝通不暢。我在家工作,並將我的項目上傳到SVN服務器,老闆隨後用它來更新實時服務器。不知何故,正確的文件沒有得到更新 - 我的一個溝通錯誤。另一個可能的原因是,頁面在被聲明爲XHTML 1.0 Strict時,有50個驗證錯誤(錯誤地嵌套UL),我清理了多達5個錯誤。所以,謝謝大家,但又是團隊溝通重要性的一個可悲的例子。

0

有沒有可能是你使用的是指向文件的本地盤/移動硬盤上一個src鏈接到(某些)的腳本文件?如果是這樣,那就可以解釋爲什麼它只能在你的機器上工作,因爲只有你的機器可以訪問腳本文件。