2011-03-14 24 views
2

我一直在努力,现在推测这一个了一段时间,但没有运气。的jQuery和javascript如果...别的问题

我用最简单的jQuery和Ajax被点击导航栏或补充工具栏的链接时,内容加载到我的网页。我只是把这个的document.ready:

$("#nav ul li a").click(function(){content_load($(this).attr('href'));return false;}); 

我content_load功能是这样的:

function content_load(toLoad) 
    { 
    $('#content').hide('fast',loadContent); 
    function loadContent() 
    { 
    $('#content').load(toLoad,'',function(){showNewContent();tb_init('a.thickbox, area.thickbox, input.thickbox');}); 
    } 
    function showNewContent() 
     { 
     $('#content').show('fast'); 
     } 
    } 

这工作!

可是......当我把简单的if ... else语句在function_load(),而不是简单的Ajax负荷,我得到导航到我想与load()函数加载页面。这就像“返回false”被忽略......

所以这是代码,“休息”的一切:

function content_load(toLoad) 
    { 
    if(toLoad=="content/page1.html") {//do something} 
    else 
    { 
    $('#content').hide('fast',loadContent); 
    function loadContent() 
     { 
     $('#content').load(toLoad,'',function(){showNewContent();tb_init('a.thickbox, area.thickbox, input.thickbox');}); 
     } 
     function showNewContent() 
     { 
     $('#content').show('fast'); 
     } 
    } 
    } 

任何想法,为什么???

谢谢! 纽曼

+1

嗯,我知道这始终是一个风格问题,但缩进风格实在是太难看了。 – Pointy 2011-03-14 11:06:21

+0

什么是'function_load'? – 2011-03-14 12:16:26

+0

雅知道,{/ /做某事}注释出结束括号。 – 2011-03-14 12:40:00

回答

2

的右括号也许这是一个奇怪的范围问题。把功能if...else语句外,甚至更好,使用匿名函数:

function content_load(toLoad) { 
    if(toLoad=="content/page1.html") { 
     //do something 
    } 
    else { 
     $('#content').hide('fast', function() { 
     $(this).load(toLoad, function() { 
      $(this).show('fast'); 
      tb_init('a.thickbox, area.thickbox, input.thickbox'); 
     }); 
     }); 
    } 
} 

,您被重定向到页面意味着你的函数错误的地方。如果你的代码在//do something,你也应该检查一下。

浏览器的错误控制台应该给你至少一些信息。


相反的return false你也可以调用事件对象的适当方法:

$("#nav ul li a").click(function(event){ 
    // event.preventDefault(); <-- put here to always prevent reload, 
    //        even on error (but should be avoided) 
    content_load(this.href); 
    event.preventDefault(); 
}); 
+0

这工作!非常感谢!看起来有一些范围问题。你救了我的一天;) – Newman 2011-03-14 11:34:52

+0

@Newman:不客气:)其实我不知道为什么,但我知道,Firefox把控制语句中创建不同的功能。你在哪个浏览器中测试它?不要忘记点击旁边的蜱大纲接受这个答案;) – 2011-03-14 11:36:12

+0

Iceweasel :)我也改变了“返回false”到“e.preventDefaul()” ...所以我想这就是它。再次感谢! – Newman 2011-03-14 11:41:20

1

不知道这是一个错字,但在右括号被注释掉。

//do something} 

这将导致它打破

+0

不,这只是一个错误:)在我的代码中没关系...... – Newman 2011-03-14 10:56:22

+0

还有其他建议吗? – Newman 2011-03-14 11:01:16

+0

是的,我会建议删除一切,只是把一个if else语句,提醒每个分支 - 警报(“如果段内分支”)和警报(“else分支里面”)。然后我们会看到返回错误是否有效(它应该)。 – 2011-03-14 11:08:53

2

是在第一线的评论注释掉你的if语句

+1

//做一些事情} – 2011-03-14 10:55:43