2010-09-26 84 views
1

我有一个用HTML制作的菜单,使用一个带有大量LI的简单UL。每个项目都包含与“主”类相关的链接。当列表项(列表项中的任何位置 - 不仅仅是文本)被点击时,jquery检查项目是否包含类“primary”的链接,如果是,则将指定的页面加载到隐藏的div中尽管其实际上不是临时的,但是仍然称为临时的),然后提取新页面的某些部分以设置为可见页面的部分的html。例如,它需要“.temp。内容”并将其放在“.content”中。它基本上提取html,将“.temp”的html设置为空(否则行$(“。content”)。html(newhtml);将在临时div中设置“.content”的html),然后将原始内容div的html设置为newhtml。JQuery .html()问题

但是我有一个小问题。它似乎有时会让div变为空白,有时需要两次点击来加载页面,有时我可以点击项目1,然后点击项目2,它立即加载项目1中的内容(即内容中显示的内容按项目1加载的页面的div)。

其实我可以做一个 “产业链” - 点击项目1,2,3,4,然后1和2再次和我看到的空白,对,4个项目1,2,3和1

内容

有没有人有任何线索,这是怎么回事?

非常感谢提前。

问候,

理查德

在回答彼得Ajtai(我曾试图缩短尽可能 - 它实际上是比这要复杂得多,因为我有一个3栏布局和修复,使所有3列阴影,以相同的高度 - 但我认为所有的基本的东西在这里)...

页的基本结构:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
     //jquery includes 
     $("li").click(function() { 
      var url = $(this).find("a.primary").attr("href"); 
      if (url != "" && url != null) { 
       $(".temp").load(url); 
       var newhtml = $(".temp .content").html(); 
       $(".temp").html(""); 
       $(".main-col").html(newhtml); 
      } 
     }); 
    </head> 
    <body> 
     <div class="wrapper"> 
      <div class="leftmenu">//left menu stuff here, in the following format: 
       <ul> 
        <li class="header">Content Management List</li> 
        <li><a class="primary" href="/Administration/List.aspx?subitem=range">Ranges</a></li> 
        <li><a class="primary" href="/Administration/List.aspx?subitem=collection">Collections</a></li> 
       </ul> 
      </div> 
      <div class="content"></div> 
      <div class="temp"></div> 
     </wrapper> 
    </body> 
</html> 
+2

你能提供pertinenent HTML和jQuery?这样调试会更简单。 -----------你应该确保做的一件事只是将页面加载到'div'中一次。之后,简单地切换包含页面的'div'的可见性。 – 2010-09-26 04:40:04

+0

我已将我的代码添加到问题中... – ClarkeyBoy 2010-09-26 05:00:09

回答

2

我认为你应该在你的成功处理函数中捕获ajax响应,并将它放在第一次需要的地方。为相同的内容做多个DOM插入是:

a)缓慢和笨重,并且
b)可能是您的问题来自何处。

很有可能(没有看到你的代码)你在某个元素上有一些重复的id。

如果您需要将从服务器返回的内容插入到文档中的不同位置,请考虑将您的服务器响应更改为JSON,并将这两个HTML字符串放入不同的数组元素中。

UPDATE
从你的例子,它看起来像你只是将内容加载到.main-col如果是的话你可以做,只有具有该主山坳里属于内容提供了一个视图的新服务器的方法,然后做到这一点:

$("li").click(function() { 
     var url = $(this).find("a.primary").attr("href"); 
     if (url != "" && url != null) { 
      $(".main-col").load(url); 
     } 
    }); 
+0

嗯似乎我可能会在这里越来越深 - 我对jQuery的经验非常有限...我认为这将是一个简单的加载页面,然后更改各种元素的内容。我想我可以在查询字符串中添加一个数字(使用$(“。temp”).load(url + loadcount);;并且每次加载页面时都会增加loadcount,这可以附加到每个元素的ID中新页面 - 使每个ID都是独一无二的,但我不知道这个效率会有多高,但它可能会解决这个问题 – ClarkeyBoy 2010-09-26 04:59:13

+0

这个评论是关于你发布的更新(我没有意识到它到目前为止)grr stupid enter =在textarea函数上提交... anywho所以你所说的是在查询字符串上标记一些东西,然后服务器读取并认为(或者确切地说)它是一个需要的部分页面,然后只发送需要的信息..?听起来很简单 – ClarkeyBoy 2010-09-28 23:28:25

+0

准确地说,或者为部分页面编写一个新的服务器方法,然后你只需要插入你需要的DOM到 – Stephen 2010-09-29 11:39:52