Jquery鼠标事件不会触发

时间:2012-06-05 12:21:34

标签: javascript jquery javascript-events

我有一个非常奇怪的问题。我的示例代码工作[这里] [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");
});

1 个答案:

答案 0 :(得分:5)

如果您的代码实际上是引用的,那么问题是当您尝试将事件处理程序挂钩时,这些元素不存在。 jsFiddle的默认设置可以隐藏此问题。 (在左侧看,你会看到你的代码在load事件触发之前不会运行 - 这在页面加载过程中非常非常晚。)

要解决此问题,请执行以下操作:

  1. 在结束</body>标记之前或之后,将脚本标记移动到文档的末尾。当浏览器运行脚本时,元素将存在。这是recommendation of the YUI team和Google的网络工程师like it too

  2. 使用jQuery的ready事件。

  3. 与其中任何一个相结合,您可能还会考虑使用事件委派而不是直接连接元素上的事件。您的mouseupmousedown处理程序将分别附加到每个 a元素。这是很多连接。如果有一个容器,所有这些a元素都在(body或更好,更近的东西),您可能会将事件挂钩到该容器上(因为这些事件会冒泡),然后检查以查看如果事件源自a元素。 jQuery支持事件委派,为你完成大部分艰苦的工作,通过delegate(我喜欢,因为它是如此明确),最近,你传递给on的六个参数变体之一