使用alert()修复JavaScript / jQuery的奇怪问题

时间:2011-08-28 11:17:01

标签: 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行之间添加alert('somthing'); anchorHrefValue2返回正确的值,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;
});

2 个答案:

答案 0 :(得分:3)

当我有一个类似的奇怪的bug,当我添加一个警告框时消失了,结果发现同一个事件(失去焦点的div)触发了两个不同的javascripts。 (我想添加警报让一个脚本有机会在另一个脚本被触发之前完成)。所以像CamelCamelCamel所说的异步行为,但即使没有服务器端代码,也可以获得(不需要的)异步行为。希望能帮助别人。

答案 1 :(得分:0)

ul.container_12 li ul li div ul li.icon_export

这是一个非常长且非常具体的选择器,如果你只改变一点HTML代码,这个选择器就会破坏。尝试简化它。对我来说,似乎.container_12 .icon_export也可以。