2009-06-24 42 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链接到(某些)的脚本文件?如果是这样,那就可以解释为什么它只能在你的机器上工作,因为只有你的机器可以访问脚本文件。