编辑:请参阅评论,了解我不知道如何在基本级别使用事件(以及答案)
我觉得这应该是一个简单的解决办法,但过去一小时我一直在扯掉它。
我有一个看起来像这样的函数:
$(document).ready(function() {
$("#score svg").mousedown(event.data, scoreDrag);
});
完美无缺,事件已定义。
但是我不希望在不同的脚本(在此之前定义)中的某个函数完成#score
中的所有SVG之前分配处理程序所以我所做的是在脚本中定义一个全局变量,使得SVG(SVGloaded)在完成所有SVGS之前不成立 - 一个là:
var isSVGloaded;
$(document).ready(function() {
isSVGloaded = window.setInterval(function() {
if (SVGloaded) {
$("#score svg").mousedown(event.data, scoreDrag);
window.clearInterval(isSVGloaded);
}
}, 100);
});
其中,不起作用 - 事件未定义。
我在实际脚本中的模块全局函数中有上面的代码,但我认为这与它没有任何关系。
答案 0 :(得分:1)
当你在第一个例子中使用event
时,你可能指的是window.event
,它在某些浏览器中分配给最后一个被引发的事件:
http://www.quirksmode.org/js/events_access.html
正如评论中所提到的,你可能不应该依赖它,因为它是非标准的,(恕我直言)超级混乱。
无论如何,在您的第一种情况下,window.event
将是jQuery响应的ready
事件,而不是您可能想要处理的click
事件(http://jsfiddle.net/XLhL9/1/)
如果你处于setInterval
回调状态,那么看起来根本没有定义window.event
,大概是因为浏览器当前没有处理事件。您可以在http://jsfiddle.net/ujR5p/中看到这一点。
如果确实希望访问ready
回调中的setInterval
事件,那么诀窍就是在{{1}内获取window.event
的值回调,将其分配给变量,然后在超时回调中引用该变量:
ready
但听起来你真正想要的是$(document).ready(function() {
// event is defined here, so assign it to a variable
var theEvent = event;
isSVGloaded = window.setInterval(function() {
if (SVGloaded) {
// event is no longer defined, but theEvent still is:
$("#score svg").mousedown(theEvent.data, scoreDrag);
window.clearInterval(isSVGloaded);
}
}, 100);
});
事件。幸运的是,jQuery让这个超级容易访问:
mousedown
您是否可以通过在load上执行此代码而不是准备好来避免此var scoreDrag = function (eventObject) {
// jQuery will pass the `mousedown` event in as `eventObject`
// see http://api.jquery.com/mousedown/#mousedown-handler
alert('X: ' + eventObject.pageX + ' Y: ' + eventObject.pageY);
};
?或者通过提出自定义事件?
答案 1 :(得分:0)
'确定您的第一个脚本不起作用
$(document).ready(function() {
$("#score svg").mousedown(event.data, scoreDrag);
});
也许你的意思是这样的:
$(document).ready(function() {
$("#score svg").mousedown(
function(event){
alert('Mouse down');
}
);
});