2011-05-02 67 views
1

我正在一个新的网站TheDigitalScale和我正在使用jQuery创建一个功能列表,单击时扩展div,并关闭另一个点击div。jQuery切换Divs展开当JavaScript do_PostBack链接被点击

<script type="text/javascript"> 
$(document).ready(function() 
{ 
    //hide the all of the element with class msg_body 
    $(".msg_body").hide(); 
    //toggle the componenet with class msg_body 
    $(".msg_head").click(function() 
    { 
    $(this).toggleClass("msg_head2").next(".msg_body").slideToggle(100); 
    }); 
}); 
</script> 



<div class="msg_list"> 
    <p class="msg_head">They Forgot The Buttons</p> 
    <div class="msg_body"><p> 
    Just kidding. The MXT has nifty touchscreen controls so you never have to worry about buttons getting dirty or broken. 
    </p></div> 
    </div> 

它工作正常和所有,但我也有一个使用JavaScript的do_PostBack功能扩展评审小组商品评论链接。

<a href="javascript:__doPostBack('ctl00$wpm$ShowProduct$ctl07$ReviewLink','')">Review and Rate this item</a> 

点击评论链接时,会导致所有jQuery div展开。

当我将enablepartialrendering设置为false并且它“修复”了问题,但是当点击评论链接时,它将用户带到页面的顶部并展开评论面板,而不仅仅是展开评论面板并让用户在正确的位置。

我希望我解释得很好;我对jQuery,JavaScript和AJAX很新。

问候, 沙拉

编辑:

我想我真的不问一个问题所以...

我能换作审查环节展开审查并保持用户在该区域没有扩大每个jQuery div?

这里是一个产品页面的链接:MBSC-55

+0

我认为__doPostBack是一个.net的东西,可能应该包括那个问题的标签。有没有可访问的页面,我们可以看到发生了什么? – 2011-05-02 20:10:44

+0

嗨kingjiv,谢谢你的标签建议。该网站正在使用ASP.net和AJAX。这是一个产品页面,其中包含以下内容:[link](http://www.thedigitalscale.com/My-Weigh-MBSC-55-Digital-Baby-Scale-P7C12.aspx)。现在我已经设置了enablepartialrendering =“true”,这样当点击“Review and Rate this item”链接时,div将展开。 – HelloTornado 2011-05-02 20:17:59

+0

这是包装在一个更新面板?如果是这样的话,请检查更新面板是否还没有返回扩展器项目,以取代div的内容,破坏您的代码... – 2011-05-02 20:33:15

回答

1

它看起来像你有嵌套的updatepanels。尝试将父面板的UpdateMode property设置为Conditional以防止子面板更新面板触发父面板。

+0

看起来像kingjiv的回答解决了这个问题,我很想感谢您花时间回答我的问题 – HelloTornado 2011-05-02 20:55:00

+0

不客气,但请注意:您可能正在进行一次性能测试重新渲染父级更新面板的内容,正如kingjiv在他的回答中提到的,如果你使用我的方法来消除不必要的HTML,那么最好的办法可能是最好的。 – brianpeiris 2011-05-02 20:58:50

+0

好的,我一定会看看你的链接提供并尝试一下,我很犹豫,因为我对此很陌生,恐怕我们的网站可能会去在火焰中。再次感谢你。 – HelloTornado 2011-05-02 21:02:47

0

好吧,我想我看到发生了什么。当你的页面加载执行该代码:

$(document).ready(function(){ 
    //hide the all of the element with class msg_body 
    $(".msg_body").hide(); 

    //toggle the componenet with class msg_body 
    $(".msg_head").click(function() { 
    $(this).toggleClass("msg_head2").next(".msg_body").slideToggle(100); 
    }); 
}); 

现在,当.NET做回发是重新创建这些.msg_body和.msg_head元素。最好的解决办法是让.net不能取代那些(除非你需要它们)。

如果你需要那些重新绘制,你可以做2件事。首先,将.msg_body设置为隐藏在你的CSS中,这样它们默认是隐藏的。然后以处理click问题,这种取代点击代码:

$(".msg_head").live("click", function() { 
    $(this).toggleClass("msg_head2").next(".msg_body").slideToggle(100); 
    }); 

这会导致点击处理程序仍然是新增.msg_head项目工作。

+0

工作起来就像一个魅力,你真的知道你是个东西,非常感谢你花时间看看并提供一个答案 – HelloTornado 2011-05-02 20:53:36