我需要找到在对象上注册的事件处理程序.
例如:
$("#el").click(function() {...});
$("#el").mouseover(function() {...});
Run Code Online (Sandbox Code Playgroud)
$("#el")有点击和鼠标悬停注册.
是否有一个函数来找出它,并可能迭代事件处理程序?
如果通过适当的方法在jQuery对象上不可能,那么在纯DOM对象上是否可能?
有没有办法检查jQuery中是否存在事件?我正在使用一个使用自定义命名空间事件的插件,并希望能够检查事件是否绑定到元素.
jQuery事件处理程序总是以绑定的顺序执行,这可能很烦人.例如:
$('span').click(doStuff1);
$('span').click(doStuff2);
Run Code Online (Sandbox Code Playgroud)
单击跨度将导致doStuff1()触发,然后doStuff2().
在我绑定doStuff2()时,我想在 doStuff1()之前选择绑定它,但似乎没有任何简单的方法来执行此操作.
我想大多数人会说,只需编写如下代码:
$('span').click(function (){
doStuff2();
doStuff1();
});
Run Code Online (Sandbox Code Playgroud)
但这只是一个简单的例子 - 在实践中,这样做并不总是方便.
在某些情况下,您要绑定事件,并且您绑定的对象已经有事件.在这种情况下,您可能只希望在任何其他现有事件之前触发新事件.
那么在jQuery中实现这一目标的最佳方法是什么?
我想使用JavaScript模拟页面上任何链接的点击.如果该链接具有与其"onclick"事件绑定的某些功能(由任何其他JS我没有任何控制),则必须调用该函数,否则链接应以正常方式运行并打开新页面.
我不确定只检查'onclick'处理程序的值就足够了.我想构建它,以便它适用于任何链接元素.
我无法使用任何JS库(不一定是jQuery)或简单地使用JavaScript来控制可能绑定到链接的onclick事件的函数.
编辑:在下面的答案的帮助下,看起来可以检查使用jQuery附加的事件处理程序或使用该onclick属性.如何检查使用addEventListener/任何其他JS库附加的事件处理程序,以便它是万无一失的?
在浏览源代码时,我注意到'toggle'应该jQuery._data用来存储元素的状态.我检查的jQuery.cache对象中铬,发现元素的数据对象有另一个目标下它由字的jQuery前面添加一个数字,我猜唯一标识.但是,我没有看到关于元素状态的数据.简单{olddisplay: 'block'}.关于jQuery._data的目的以及它本身如何工作的任何线索?
我一整天都在盯着源头......请不要告诉我查看来源.我的眼睛和大脑会感谢你.
可能重复:
测试事件处理程序是否绑定到jQuery中的元素
试图做以下(链接是'a'标签的jQuery对象):
link.data("events") //undefined even if link has event handlers
jQuery.data(link, 'events') //undefined always also
jQuery._data(link, 'events') //undefined always also
Run Code Online (Sandbox Code Playgroud)
使用jquery-1.8.3
那么,如何检查元素是否有点击处理程序?
我有以下jQuery适用于除 Opera 之外的所有主流浏览器:
jQuery(document).ready(function () {
jQuery("#GetResults").live("click", function(e){
e.preventDefault(); //Opera doesn't execute anything here
});
};
Run Code Online (Sandbox Code Playgroud)
单击以下链接时应该触发:
<a id="GetResults" href="Folder/File/javascript:void(0);">Get Results</a>
Run Code Online (Sandbox Code Playgroud)
只有Opera忽略了这个.有任何想法吗?
编辑:
我刚刚发现如果我用.bind()代替.live(),一切都按预期运行.我找不到任何与Opera中的.live()错误相关的文档,它确实在jsFiddle 中工作,它指向环境的东西.可能导致这种行为的原因是什么?
我是Javascript编程领域的一个相对tyro,所以请放轻松我.:-)
我正在尝试将eventListener添加到页面上的各种DOM元素.但是,我添加我的事件的一些元素已经有了一个eventListener,我不想取代那个; 我只想将我的事件添加到一个尚未与之关联的事件的元素中.
我查看了一堆与addEventListener,event.StopPropagation,事件冒泡等相关的东西,但还没有找到任何方法来实现这一点.
有没有办法检测给定元素上的其他事件侦听器,或者某种其他方式来获取我想要的位置?
我正在学习JQuery,因为我正在对网站进行重大的重新设计.我意识到这将是多么好的做一些造型中的JavaScript,而不是记住要正确的CSS类添加到每一个DIV(显然,我想忘记这样的事情).
无论如何,我想将样式添加cursor: pointer;到已注册click事件的所有元素.我认为它需要看起来像这样:
$("div").Find(/*Has Click Event*/)
.css("cursor", "pointer");
Run Code Online (Sandbox Code Playgroud) 我有一个函数,基本上创建一个覆盖整个页面的叠加div元素.它还将resize事件绑定到窗口,因此每当调整窗口大小时,叠加层也会更改其大小:
function stdOverlay() {
var overlay = $('<div />').css({width : $(window).width(), height : $(window).height()});
var overlayResize =
function() {
$(overlay).css({width : $(window).width(), height : $(window).height()});
};
$('body').append(overlay);
$(window).resize(overlayResize);
//... other codes, like remove overlay and unbind the events
//$('div.stdgui-overlay').unbind('resize', overlayResize);
}
Run Code Online (Sandbox Code Playgroud)
每次调用该函数时,如果没有,则添加一个叠加层,并将resize事件绑定到窗口.当它应该删除重叠事件时,它也会取消绑定事件.如果overlayResize方法绑定到window元素,如何防止重复绑定?就像是:
if(overlyResize is not bound to window)
$(window).resize(overlayResize);
else
//do something else or do nothing;
Run Code Online (Sandbox Code Playgroud)