Jquery鼠标事件不会触发

Adr*_*ano 0 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>
Run Code Online (Sandbox Code Playgroud)

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");
});
Run Code Online (Sandbox Code Playgroud)

T.J*_*der 5

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

要修复它,要么:

  1. 在结束</body>标记之前或之后,将脚本标记移动到文档的末尾.当浏览器运行脚本时,元素将存在.这是YUI的团队的建议和谷歌的网络工程师也喜欢它.

  2. 使用jQuery的ready事件.

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