Javascript jquery addClass有1次行为不端,另一次工作
也许这个问题可能会变得过于宽泛,但我不得不发帖,因为这让我很不安,因为一段时间以来,在网上搜索没有成功 我有一个代码,它使用jquery的Javascript jquery addClass有1次行为不端,另一次工作,javascript,jquery,css,addclass,Javascript,Jquery,Css,Addclass,也许这个问题可能会变得过于宽泛,但我不得不发帖,因为这让我很不安,因为一段时间以来,在网上搜索没有成功 我有一个代码,它使用jquery的addClass方法将一个类添加到某个事件的现有元素中。这是工作良好,是我的网站,除了1我的大部分网页。我无法找到造成问题的原因 在这个特定的页面中,addClass将class属性中的当前值替换为未定义 下面是javascript代码 $(this).find('.searchbox').addClass('wid344'); 下面是我的元素,上面的代码向
addClass
方法将一个类添加到某个事件的现有元素中。这是工作良好,是我的网站,除了1我的大部分网页。我无法找到造成问题的原因
在这个特定的页面中,addClass将class属性中的当前值替换为未定义
下面是javascript代码
$(this).find('.searchbox').addClass('wid344');
下面是我的元素,上面的代码向其中添加了类
<input id="SearchBx" type="text" class="searchbox" name="search_text" value="">
下面是它转换成的内容
<input id="SearchBx" type="text" class="undefined" name="search_text" value="">
在其余页面中,它将被转换为
<input id="SearchBx" type="text" class="searchbox wid344" name="search_text" value="">
我发现的一个区别是,在运行的页面中,jquery版本是1.4.2,而不运行的页面是1.6.4,但我无法在它们之间找到任何与addClass相关的内容
谁能告诉我我会错过什么
如果您需要任何进一步的信息,请告诉我
请帮忙
提前谢谢
编辑:
正在断开的页面位于此处(出于安全原因,链接已删除)。末端有一个放大镜,可以显示/隐藏不工作的文本框。这在其他页面中运行良好 您还可以:
$('#SearchBx').removeClass('wid344').addClass('wid344');
我先删除了它,因为它可能是类已经在其中了。如果添加类对您不起作用,您可以使用attr()函数按如下操作 例如 $('SearchBx').attr('class',$('SearchBx').attr('class')+'wid344') 不知道未定义的是从哪里来的
希望能对你有所帮助。我发现了这个问题。在
ic_commons.js
文件中,您正在重写jQuery使用的String.prototype.trim
函数,它有一个错误
您将其定义为:
String.prototype.trim = function () {
return
(this.replace(/^[\s\xA0]+/, "").replace(/[\s\xA0]+$/, ""));
};
您必须删除打断线:
String.prototype.trim = function () {
return (this.replace(/^[\s\xA0]+/, "").replace(/[\s\xA0]+$/, ""));
};
它总是一无所获
---之前的回答让我明白了错误所在---
我发现问题出在jQuery的AddClass中使用的trim
函数中。在1.4.2中,它使用jQuery实现的函数,但在1.6.4中,它尝试使用JavascriptString.prototype.trim
函数,出于某种原因,我不知道它返回的是未定义的
您可以在代码中添加jQuery后添加这个函数,将trim函数更改为1.4.2中使用的函数,而不改变整个jQuery(但我不知道它是否会破坏某些东西):
您可以尝试在悬停元素之前打开javascript控制台,执行该代码,您将看到它的工作原理。您能在JSFIDLE中用适当的jQuery版本重现它吗?在这种情况下,
$(这个)
是什么?@Joe,@RGraham;已编辑的问题如果以前的类显示结果X,并且当DOM更改时,它应该显示结果Y,则它不会刷新到新状态。错误。。。我真的不明白你的意思there@samar我已经用实际错误更新了我以前的答案。我不会删除上一个(我将把它放在下面),因为它解释了我是如何发现修剪功能上的错误的。这似乎是可行的。我所做的是添加您最新的代码,即$.trim=…
作为$(“#searchwrapper”).mouseenter(函数(){
。这也不会破坏其他页面。请让我知道这是否是正确的方法。顺便说一句,我这边的+1。我彻底检查后会将其标记为答案。非常感谢。)@samar检查我编辑的答案,事实上我发现问题出在代码的另一部分。如果您更改了该部分,则不必重写$.trim函数。:)是的,我只添加了编辑部分中给出的代码。只是想确认我是否添加了正确的位置。请参考我以前的评论并让我知道。@samar抱歉对于延迟响应。如果可以,您应该直接在ic_commons.js
中编辑该代码,不要再添加它,因为该函数的格式不正确。在该文件中编辑它之后,它应该在所有页面中以其应能的方式工作,因为现在它正在用一个工作不正常。我希望我已经正确地解释了。如果你不能编辑该文件,请在添加ic_commons.js
文件后添加该代码,这样它总是能正常工作。它似乎可以工作,但当鼠标离开时,它就坏了。我想我也必须更改鼠标,以匹配你的代码。我会给它一个提示我会通知你的。
$.trim = function( text ) {
return (text || "").replace( "/^(\s|\u00A0)+|(\s|\u00A0)+$/g", "" );
}