我正在尝试创建一个JS框架。
这是我的JS代码:
function $(id)
{
var info={
version:1.0
}
if(id)
{
if(window === this)
{
console.log('window id == '+id);
return new $(id);
}
console.log('id == '+id);
this.e = document.getElementById(id);
return this;
}
else{
return info;
}
}
$.prototype={
controller:function(pl)
{
if(typeof pl.events === 'function')
{
console.log('event is function');
}
},
click:function(callback)
{
this.e.addEventListener('click', callback, false);
return this;
}
};
我在这称呼此框架
<div id='test'>
<div id='btn1'>Button1</div>
</div>
<div id='btn2'>Button2</div>
<script>
$('test').controller({
events:function()
{
$('btn1').click(function(){
alert('btn1 clicked');
});
}
});
$('btn2').click(function(){
alert('btn2 clicked');
});
</script>
输出
window id == test
id == test
event is function
window id == btn2
id == btn2
问题是 btn1 点击事件无效但 btn2 点击工作正常。可以提出一些解决方案或一些更好的方法来使JS框架工作吗?
答案 0 :(得分:0)
问题是btn1点击事件无法正常工作
好吧,你没有附上听众。你确实将一个函数传递给了controller
方法,它可以做到这一点,但它从未被调用过。
controller: function(pl) {
if (typeof pl.events === 'function') {
console.log('event is function'); // but do nothing?
// add this:
pl.events();
}
}