2011-08-28 35 views
1

这里是我的代码:使用JavaScript/jQuery的奇怪的问题,其开始使用警报固定的()

$('ul.container_12 li ul li div ul li.icon_export').click(function (e) { 
    e.preventDefault(); 
    var anchorHrefValue2 = $('a', this).attr('href'); 
    var mycat2 = $(this).parents('li.current').attr('class').split(' ')[0]; 
    window.location = anchorHrefValue2+"?active="+mycat2; 
}); 

当我点击菜单在Firefox好像变anchorHrefValue2是不确定的,如果我行3和4 anchorHrefValue2之间添加alert('somthing');返回正确的值并mycat2返回值menu!我不知道它来自哪里。 这两个变量已被正确设置,但不是在一起。

两者都使用alert();返回正确的值,但似乎未定义调用行:window.location=...;

如果有人遇到与此相关的任何内容,请分享。我已经在启用了JavaScript的不同浏览器中测试过了。

顺便说一句,我拥有其作品就好了同一个目标(只选择与第一个不同)父菜单这样的另一个功能:

$('ul.container_12 li ul li').click(function (e) { 
    e.preventDefault(); 
    var anchorHrefValue = $('a', this).attr('href'); 
    var mycat = $(this).parent().parent().attr('class').split(' ')[0]; 
    window.location = anchorHrefValue+"?active="+mycat; 
}); 
+4

如果警报修复您的问题意味着问题是由于异步行为。尝试使用console.log并查看结果是否更改。那就是海森堡。 – CamelCamelCamel

回答

3

当我有一个类似的奇怪的错误,当我添加一个警告框时消失,事实证明,同一事件(一个div失去焦点)触发了两个不同的JavaScript。 (我猜想添加警报后,一个脚本有机会在另一个脚本触发前完成)。因此,像上述CamelCamelCamel所说的异步行为,即使没有服务器端代码,您也可以获得(不需要的)异步行为。希望能帮助别人。

+0

这是一个古老的问题,但这是问题在这里。谢谢 –

0

ul.container_12 li ul li div ul li.icon_export

这是一个非常长且非常具体的选择器,如果只是稍微更改HTML代码,则此选择器将会中断。尝试简化它。对我来说,似乎.container_12 .icon_export也会起作用。

+0

thx我会检查出来 –