2010-11-08 52 views
4

我有了这个jQuery代码,这让我点击一个链接来获取其父亲,并且在另一个地方改变一些值:

$("a.menu_filter_select").click(function(){ 
    var parent_filter = $(this).parent("tr"); 
    // Update value 
    parent_filter.find(".filter_value").html($(this).html()); 
}); 

的问题是,它会在$空值(这),这是一个意想不到的行为,我不明白为什么它不工作,任何想法?

这里是控制台的调试与方法中的断点:

$(this) 
> null 
this 
> <a class=​"menu_filter_select" href=​"http:​/​/​localhost:​3000/​#" rel=​"1">​test</a>​ 
+1

可以请您发布本节的html代码?快速修复将使用.parents(“tr:eq(0)”) – meo 2010-11-08 09:38:52

+3

.parents()方法不能被调用,因为$(this)为空 – Alex 2010-11-08 09:40:45

+0

是的,我认为有一个html错误 – 2010-11-08 09:41:12

回答

4

我认为这是因为你的函数收到一个事件作为参数,你需要event.target。

我还建议使用closest代替parent,因为如果有人把<b><i><span>在锚你的代码会甚至工作。我也使用find而不是child

编辑:实际上,FireFox中的this引用了锚对象,但我无法确定它是否在其他浏览器中以相同的方式实现。 event.target可以参考子对象如果说该文件是这样的:

<a><b>some text</b> other text</a> 

那么这个事件处理程序可以输出不同的元素:

$(a).click(function(event) { console.log(this, event.target); }); 

尝试在萤火运行此代码, 看看它怎么运作。

+0

谢谢很多,这是一个工作! – Alex 2010-11-08 09:45:39

0

偶尔$和jQuery可以失败之间的结合,尝试用jQuery代替$。

也尝试使用$ .log而不是断点来确保这个范围不会改变。

2

我能想到会发生这种情况的唯一原因是标识符$已被重新定义。

您可以检查函数$ == jQuery。如果不是,那么您可能还包含另一个使用$标识符的脚本。

如果还有另一个库也使用该标识符,并且它将$标识符的值返回到其原始值,并且您使用jQuery标识符,则可以使用jQuery的兼容性模式。

+0

谢谢,我将在下次遇到像这样的问题时检查$ == jQuery。 – Alex 2010-11-08 09:52:51

0

就我个人而言,我总是在使用jquery的时候使用jquery,但是我看到这种情况发生在我使用jquery而不是$的插件中。出于某种原因,它不喜欢使用两者,但只是在插件代码中将jquery更改为$,为我整理了它。

相关问题