蒹葭苍沧
RelaxLearning
qq_谁_15
$rating.on方法的第二个参数是一个对象,应该是.rating-item而不是rating-item
慕田峪3126352
知道了,
.rating-item{
display: inline-block;
width: 66px;
height: 76px;
background: url(img/rating.png) no-repeat;
cursor:pointer;/*光标呈现一只手*/
}
但是为什么是inline-block还是有点疑惑,inline-block不是不单独占一行,共享同一行的嘛
慕UI7829676
如果有相同的ID,javascript只会取第一个具有该ID的标签
qq_慕盖茨8361330
慕粉4077240
找到问题了,给出答案,真的是细节问题:
var $rating = $(el);//两个var分别申明变量的话,这边是分号
var $item = $rating.find(".rating-item");
或者用一个var申明两个变量,就是用逗号
var $rating = $(el),//逗号
$item = $rating.find(".rating-item");
慕移动2735134
前面的init是属性名类似的东西吧,
林念志祥
我的也是这个问题,不管几组星星,只有最后一组事件有反应,操作其他星星,也是最后一组有反应
Elias丿纯黑
abs1nthe
把jq那段代码放进init中,否则自执行,return不出去,外面拿不到
imooc翎灵霸
每次调用 lightOn() 函数都要传实参给它,即 lightOn($item,num)
qq_小草帽_1
兄台,你这提问题的姿势不对,虽然我有源码,但是感觉给了你也没啥用
大白宝宝
$item = $rating.find('rating-item');
这个语句也要改成:$item = $rating.find('.rating-item');
qq_搁浅唯一黑白的记忆_04366074
未声明变量导致

慕沐9491463
换成这样子能明白不:
return {
initfn: init
}
})();
rating.initfn('#rating', 2);
慕哥9586403
sublime text3的话 edit ->line->Reindent
调皮的魔法少女李狗蛋儿
教程里用id获取 可以不用加each,直接写return this.init(xxx,xxx)也可以;
如果用class获取 就必须对获取的元素每一个执行init, 就用each方法;
即便是id获取 , 用each方法也可以, 所以用each保证不会出错
慕粉4410246
sout_main
http://www.cnblogs.com/LoveQin/p/5227878.html
奔跑的读书人
因为封装对象方法的插件是写在 $.fn.extend({ /*代码省略*/}); 里面的,你调用的时候肯定是基于jQuery对象调用的,这里的调用是$("#rating2").rating(4);, 所以函数中的this引用的是 '$("#rating2")' 这个jQuery对象。
你可以自己试验下,在函数内部打印this 和 $(this),控制台日志上返回的都是一个数组,证明他们引用的都是jQuery对象。两种写法都可以正常运行。
清晨丶向晚
如果要把封装成jQuery插件写在rating方法外面,要注意init方法是闭包在rating里面的,所以外面是无法调用到,但是可以通过老师写的return方式得到rating的init方法,所以应该这样写:
$.fn.extend({
rating:function (num){
return $(this).each(function (){
rating.init($(this), num);
})
}
})
日奈梦夕
有没有把子类绑定到方法中,用来委托给父类 $rating.on('mouseover','.rating-item',function(){
......})
ThinkSummer
基本的功能都实现了,也没有错误,听一遍就能写出来也算是很厉害了。
建议你把鼠标移除事件和鼠标点击事件利用事件绑定放在父元素上,这样可以降低浏览器的性能需求。
ThinkSummer
再链接一个on写本身的委托方法就可以 和老师讲的一样