Javascript 为什么jQuery代码可以在Firefox中工作,而不能在Chrome或Safari中工作?
我正在使用jQuery突出显示(通过更改bg颜色)一些表单元格。我希望按钮(一个简单的锚)在单击时被赋予类名“selected”,并且我希望按钮下面的某些表格单元格高亮显示。再次单击同一按钮时,将取消选择并删除表格单元格中的高光。单击其他按钮时,它将删除其他高光并切换到新的相应高光 这一切在Firefox中都非常有效。当我在webkit浏览器中尝试它时,它不会。我不明白为什么,这让我发疯了!jQuery代码如下所示。您可以在以下位置查看该页面: 我感谢你的帮助 变化:Javascript 为什么jQuery代码可以在Firefox中工作,而不能在Chrome或Safari中工作?,javascript,jquery,firefox,webkit,Javascript,Jquery,Firefox,Webkit,我正在使用jQuery突出显示(通过更改bg颜色)一些表单元格。我希望按钮(一个简单的锚)在单击时被赋予类名“selected”,并且我希望按钮下面的某些表格单元格高亮显示。再次单击同一按钮时,将取消选择并删除表格单元格中的高光。单击其他按钮时,它将删除其他高光并切换到新的相应高光 这一切在Firefox中都非常有效。当我在webkit浏览器中尝试它时,它不会。我不明白为什么,这让我发疯了!jQuery代码如下所示。您可以在以下位置查看该页面: 我感谢你的帮助 变化: id = $(this)
id = $(this).attr("id");
name = $("." + id);
致:
也就是说,用var
声明变量,使其具有局部作用域。
如果没有var
,变量具有全局范围,并且与某些内容冲突
它现在可以在Chrome/Safari中使用:解决问题的一些方法:
name
已经是jQuery对象。将此行更改为:
name.removeClass('highlight');
及
另外,不是而是返回false代码>,我建议使用event.preventDefault()
,如下所示:
$('.press').click(function(event) {
// ...
event.preventDefault();
});
显然,name
正被chrome用于其他目的。如果您的name
变量不是全局变量,即var name
而不仅仅是name
,那么它可能会起作用。尽管我只想使用不同的变量名。这是“not(name)”实现了您真正的意思,还是希望使用您创建的样式选择器?此外,变量“name”已经是一个jQuery对象,但您稍后将其包装为一个新的jQuery对象。这不是问题的一部分,但应该缓存jQuery对象。例如,“var$this=$(this)”在开头声明一次,之后可以使用“$this”。考虑对在给定代码中多次创建的jQuery对象执行相同的操作。谢谢您的快速响应。是用“名字”把我搞砸了。我感谢你的帮助!你的第一点实际上不会有什么不同。你的第二点是很好的建议,但不是问题的原因。
name.removeClass('highlight');
name.addClass('highlight');
$('.press').click(function(event) {
// ...
event.preventDefault();
});