Javascript 定义自定义事件
我想学习如何定义自定义事件,但不是像网上说的那样!让我举例说明: 在jQuery网站的部分中,它教您如何在代码中创建自定义事件: 例如 然后在活动中,您将呼叫:Javascript 定义自定义事件,javascript,jquery,events,Javascript,Jquery,Events,我想学习如何定义自定义事件,但不是像网上说的那样!让我举例说明: 在jQuery网站的部分中,它教您如何在代码中创建自定义事件: 例如 然后在活动中,您将呼叫: $(document).trigger('myEvent'); 嗯,在这里之前没问题。为了更进一步,我必须再举一个例子: 问题: 假设我们已经定义了: $.fn.myEvent=function(callback){ $(document).bind('contextmenu',this,callback); }; 因此,我
$(document).trigger('myEvent');
嗯,在这里之前没问题。为了更进一步,我必须再举一个例子:
问题:
假设我们已经定义了:
$.fn.myEvent=function(callback){
$(document).bind('contextmenu',this,callback);
};
因此,我们可以将其用作:
$(document).myEvent(function(){
alert('Hello World');
});
$(document).on('myEvent',function(){
alert('Hello World');
});
我的问题是,我们如何定义“myEvent”,以便将其用作:
$(document).myEvent(function(){
alert('Hello World');
});
$(document).on('myEvent',function(){
alert('Hello World');
});
具有$(document.myEvent()的功能
这样我们就可以向它传递回调函数,而不需要实际触发事件
更多解释:
例如,当我们调用$(document).on('click')
我们实际上不需要在其他地方触发click事件,如$(document)。trigger('click')
以使其工作,因此每当发生click
时,函数就会启动。我想为“myEvent”设置一个事件侦听器,以便在匹配条件时启动函数
换句话说(如下面的评论中所述),我想知道是否有办法让jQuery将“myEvent”视为默认事件之一(单击、鼠标移动、提交等)
任何答案或想法都将受到高度赞赏
我想为“myEvent”设置一个事件侦听器,这样当条件匹配时,函数就会启动
发动机如何知道您所指的“条件”?不,“自定义事件”之所以称为自定义事件,是因为它们不是通过一些较低级别的操作进行本地触发的,而是通过自定义代码触发的。只要看到匹配的条件,就可以触发自定义事件
关于
$.fn.myEvent
的定义,您可能想看一看(其中name
将是“myEvent”
)。您将两个不同的点放在一起:
您所能做的最好的事情就是侦听本机浏览器事件,然后让这些侦听器自己发送自定义事件。对于那些想知道(就像我在过去两年中所做的那样)您可以创建自定义事件(使用纯javascript),如下所述:
var myEvent = new Event('myEvent');
然后你可以这样使用它:
document.querySelector('button').addEventListener(myEvent, function () {});
Listen(document.querySelectorAll('button'),eventName,function(){
this.style.backgroundColor=bgColor;
});
dispatchEvent(eventName);
简单用法示例
$(document).on('myEvent',function(){
alert('Hello World');
});
假设我们有一个名为bgColor
的变量,我们想更改5个按钮的背景色,无论何时bgColor
值发生变化,段落的颜色和输入的边框颜色都会发生变化,我们不希望使用间隔来检查值的变化,也不希望在变量发生变化时反复重复相同的代码
首先,我们需要定义变量:
var bgColor='red',
eventName = 'bgColorChanged';
然后我们需要倾听事件:
function Listen(elems,eventName,callback){
var event=new Event(eventName); //create the custom event
for(var i=0, elemsLength=elems.length; i < elemsLength; i++){ //iterate over the selected elements
elems[i].addEventListener(event,callback); //add event listener for our custom event
elems[i][eventName]=event; //store the event
//store the element
if(window.affectedElems){
window.affectedElems.push(elems[i])
}
else{
window.affectedElems=[];
window.affectedElems.push(elems[i])
}
//----------------------------
}
}
然后我们需要一个函数来分派/激发我们的事件:
function dispatchEvent(eventName) {
var event=document.createEvent("HTMLEvents"), //defining the type of the event
elems=window.affectedElems; //getting the stored elements
//iterating over each element and dispatching the stored event
for(var i=0, elemsLength=elems.length; i < elemsLength; i++){
event.initEvent(elems[i][eventName], true, true);
event.eventName = eventName;
elems[i].dispatchEvent(event);
}
//-----------------------------------
}
现在一切都准备好了,我们只需要更改bgColor
的值,然后触发事件,让我们的系统完成工作
bgColor='blue';
dispatchEvent(eventName);
你想完成什么?myEvent启动需要满足哪些条件?您的
myEvent
是一个自定义事件,除非您通过触发它来实现,否则它永远不会在野外发生,那么您到底期望什么呢?@Jeff该条件(例如)是contextmenu
(或者如果用户右键单击页面)但那不是myEvent
,而是contextmenu
事件,这真的没有意义吗?回答你的问题,没有办法让自定义事件像本机事件一样,最接近的是用$(document)之类的东西触发它。on('contextmenu',function(){$(document)。trigger('myEvent')代码>你分享的非常有趣的源代码+1为了完整起见,:-)