我有一个非常奇怪的问题。我的示例代码工作[这里] [1]安静很好,但我在我的aptana工作室编辑器中有完全相同的代码,当我在Chrome或Eclipse浏览器中尝试时,事件就不会触发。我无法想象这是什么问题,因为它完全相同的代码...
的 HTML 的
<!DOCTYPE html>
<html>
<head>
<title>OrderScreen</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script src="js/script.js" type="text/javascript"></script>
</head>
<body>
<a href="">Test</a>
</body>
</html>
的的jQuery 的
$("a").mouseup(function() {
clearTimeout(pressTimer);
// Clear timeout
return false;
}).mousedown(function() {
// Set timeout
pressTimer = window.setTimeout(function() {
alert("hcbdhaf")
}, 1000);
return false;
}).click(function() {
alert("dfsdg");
});
答案 0 :(得分:5)
如果您的代码实际上是引用的,那么问题是当您尝试将事件处理程序挂钩时,这些元素不存在。 jsFiddle的默认设置可以隐藏此问题。 (在左侧看,你会看到你的代码在load
事件触发之前不会运行 - 这在页面加载过程中非常非常晚。)
要解决此问题,请执行以下操作:
在结束</body>
标记之前或之后,将脚本标记移动到文档的末尾。当浏览器运行脚本时,元素将存在。这是recommendation of the YUI team和Google的网络工程师like it too。
使用jQuery的ready
事件。
与其中任何一个相结合,您可能还会考虑使用事件委派而不是直接连接元素上的事件。您的mouseup
和mousedown
处理程序将分别附加到每个 a
元素。这是很多连接。如果有一个容器,所有这些a
元素都在(body
或更好,更近的东西),您可能会将事件挂钩到该容器上(因为这些事件会冒泡),然后检查以查看如果事件源自a
元素。 jQuery支持事件委派,为你完成大部分艰苦的工作,通过delegate
(我喜欢,因为它是如此明确),最近,你传递给on
的六个参数变体之一