2010-04-15 66 views
2

代码。点击运行不上。点击运行时,我有这样的:代码是不是超链接

$(".cancel").click(function() { 
    alert("got here"); 
    $(this).closest(":dialog").dialog("close");        
}); 

<a class="cancel" href=""><img src="images/cancelButton.gif" border="0" /></a> 

它一定是愚蠢的东西,但我无法看到它。

回答

7

我假设你在$(document).ready(function() { ... });包装代码?

$(".cancel").click(function() { 
    alert("got here"); 
    $(this).closest(":dialog").dialog("close"); 
    return false;        
}); 
+5

重要的是要注意这里的“为什么”:没有“文档就绪”条件,目标链接在DOM中还不存在,不能由jQuery修改。 – 2010-04-15 14:26:27

+1

是的,好点。我认为人们会忘记JavaScript一读完就运行,ready()命令实际上将其内容附加到documentIsNowFinishedLoadingIntoBrowserMemory事件中。 :-) – Armstrongest 2010-04-15 15:41:13

0

如果href=""而不是href="#"并不意味着它实际上重新加载点击页面?

+0

啊,以及如果我没有在那里放一个href我没有可点击性 – PositiveGuy 2010-04-15 14:27:08

1

附加在点击事件结束返回false没有onclick事件)将被忽略。

所以在这种情况下返回false将阻止浏览器跳转到链接锚点。

编辑

公平的评论如下 - 看了看jquery.com和它说

返回false从处理器就相当于在调用这两个.preventDefault()和.stopPropagation()事件对象。

+0

其漂亮不干净的使用返回false!点击(功能(o){alert(“got here”);) $(this).closest(“:dialog”)。dialog(“close”); o .preventDefault(); }); 做一个$(document).ready(function(){then it should work}) – meo 2010-04-15 14:20:36

+0

这是为什么?我补充说,但对话没有结束。 – PositiveGuy 2010-04-15 14:21:08

+0

它为什么不干净?它执行与preventDefault相同的操作,代码更少。 – mkoryak 2010-04-15 14:36:40

0

任何你把一个onclick事件用javascript调用,如果添加返回false,那么默认的行为(会发生什么:

$(document).ready(function() { 
    $('.cancel').click(function(e) { 
    alert('here!'); 
    e.preventDefault(); // prevents click from following through 
    }); 
}); 
+2

使用preventDefault()不返回false! – meo 2010-04-15 14:23:03

+0

其不是。因为你的功能总是会返回false。如果您使用事件侦听器(例如错误返回),则可能会出现问题。 – meo 2010-04-15 14:38:03

+0

是的,我明白你现在的意思,从你对上述答案的评论'如果他们都返回错误,它会有问题' – 2010-04-15 15:10:14

0

有几个人说加回归虚假;到您的点击处理程序。而应该使用preventDefault方法对事件类,像这样:

$(".cancel").click(function(event) { 
    event.preventDefault(); 
    alert("got here"); 
    $(this).closest(":dialog").dialog("close"); 
}); 

确保您在事件处理函数传递。这是首选的jQuery方式。我也总是把preventDefault()作为处理器方法中的第一件事,但我认为这没有什么不同。