jQuery有一个这样的写法: $("#id").click(function(){
//.....
})
我很想知道这个事件的写法怎么实现,jquery应该不可能为每个事件定义一个函数。查看jQuery一些源码,还有些不解,如下面的EventUtils类
(function(){ var EventUtils = window.EventUtils = function(s){
if(!this.init) return new EventUtils(s);
return this.init(s);
}
EventUtils.prototype = { init : function(s){
this[0] = s;
var arrs = "click,change".split(",");
for(var i=0;i<arrs.length;i++){
var o = arrs[i];
EventUtils.prototype[o] = function(f){
bind(o,f);
}
}
return this;
},
//绑定事件的函数,type如click,change之类
bind(type,func){....}
})();上面的代码init里面定义了click之类的事件函数,这样可以写类似jQuery的事件的代码。
但是上面的bind(o,f);这个语句在init函数里面f永远是undefined,所以init不可能绑定成功。
在$("#id").click(function(){...});之类的调用f有了值,但是o已经是change,不会绑定到click事件上。
请问如何实现??
//.....
})
我很想知道这个事件的写法怎么实现,jquery应该不可能为每个事件定义一个函数。查看jQuery一些源码,还有些不解,如下面的EventUtils类
(function(){ var EventUtils = window.EventUtils = function(s){
if(!this.init) return new EventUtils(s);
return this.init(s);
}
EventUtils.prototype = { init : function(s){
this[0] = s;
var arrs = "click,change".split(",");
for(var i=0;i<arrs.length;i++){
var o = arrs[i];
EventUtils.prototype[o] = function(f){
bind(o,f);
}
}
return this;
},
//绑定事件的函数,type如click,change之类
bind(type,func){....}
})();上面的代码init里面定义了click之类的事件函数,这样可以写类似jQuery的事件的代码。
但是上面的bind(o,f);这个语句在init函数里面f永远是undefined,所以init不可能绑定成功。
在$("#id").click(function(){...});之类的调用f有了值,但是o已经是change,不会绑定到click事件上。
请问如何实现??
$('#foo').bind('click', function() {
alert('User clicked on "foo."');
});
bind有2个参数一个事件名,一个绑定的函数,调用下ie或dom的绑定事件的函数就可以了。关键下面这种写法不知道如何实现:$("#foo").click(function(){
alert('User clicked on "foo."');
});事前jQuery肯定定义了click函数。如果click有2个参数像bind就很好实现。但是他就一个参数。用下面的方式如: var arrs = "click,change".split(",");
for(var i=0;i<arrs.length;i++){
var o = arrs[i];
EventUtils.prototype[o] = function(f){
this.bind(o,f);
}
}
这里面this.bind(o,f);的o用于会是for的最后一个值。貌似这个好像跟闭包有点小小关系???
click(fn)
在每一个匹配元素的click事件中绑定一个处理函数。
点击事件会在你的指针设备的按钮在元素上单击时触发。单击的定义是在屏幕的同一点触发了mousedown和mouseup.几个事件触发的顺序是:mousedownmouseupclick
返回值jQuery
参数fn (Function) : 绑定到click事件的函数
示例将页面内所有段落点击后隐藏。jQuery 代码:
$("p").click( function () { $(this).hide(); });
for(var i=0;i<arrs.length;i++){
(function(){
var o = arrs[i];
EventUtils.prototype[o] = function(f){
if(f)
this.bind(o,f);
}
})();
}