2013-01-07 29 views
0

我正在研究一个项目,让它在移动鼠标时改变它的颜色。 这里是没有的jQuery插件版本: 这里是HTML代码的一部分:我的jquery插件抛出异常

<div><a href="#" style="color:#000000;text-decoration:none;font-size:20px;" id="myFontDaemon"><strong>my web link places here</strong></a></div> 

这里是JavaScript部分:

var tColorTimer; 
    var myColorCollection = ["#FF6682", "#26FF51", "#263FFF", "#FF16B1", "#FFB135", "#C2B5FF","#000000"]; 

    //bind event 
    function changeFontColorWhenHover() { 
     $("#myFont").bind("mouseover", function() { 
      changeFontColor(0); 
     }); 
    } 

    //change font color 
    function changeFontColor(m) { 
     var colorValue = myColorCollection[m]; 
     $("#myFont").css("color", colorValue); 
     if (m < 7) { 
      tColorTimer = setTimeout('changeFontColor(' + (m + 1) + ')', 100); 
     } 
    } 

    //init bind 
    $(document).ready(function() { 
     changeFontColorWhenHover(); 
    }); 

上面的代码正常工作。 但是当我把它们变成一个样本jquery插件时,它会抛出异常']',我搜索了很多jquery插件,但找不到我错过的东西。 这里是jQuery插件部分:

(function ($) { 
    $.fn.fontdaemon = function() { 
    this.each(function() { 
     $(this).bind("mouseover", function() { // onmouseover event is raised 
      changeFontColor($(this), 0); 
     }); 
    }); 
    }; 

    var tColorTimer; 

    var myColorCollection = ["#FF6682", "#26FF51", "#263FFF", 
    "#FF16B1", "#FFB135", "#C2B5FF", "#000000"]; 
function changeFontColor(obj, m) { 
    var colorValue = myColorCollection[m]; 
    alert(m + "--" + colorValue); 
    $(obj).css("color", colorValue); 

    if (m < 7) { 
     tColorTimer = setTimeout('changeFontColor(' + obj + "," + (m + 1) + ')', 50); 
    } 
    alert(m + "--" + colorValue); 
}; 
})(jQuery); 

然后我用下面的代码来调用它:

<script src="fontdaemon.js" type="text/javascript"></script> 
<script type="text/javascript"> 
    $(document).ready(function() { 
     $("#myFontDaemon").fontdaemon(); 
    }); 
</script> 

当我移动我的鼠标移到文本,然后它会改变它的颜色,但它会只改变颜色数组中的第一个颜色,然后它会抛出我作为“Expected”]''的异常。

任何人都可以帮助我吗?谢谢。

PS:我搜索了很多谷歌,但找不到解决方案,任何反馈将不胜感激,非常感谢。

回答

1

你的问题是你传递一个字符串到setTimeout(这是不鼓励)。当你将一个字符串传递到setTimeout时,当超时时间结束时,它将eval字符串无法访问你的本地变量。由于传递给$的匿名函数不能访问changeFontColor,因此传递给setTimeout的字符串中的代码也无法访问它。

的解决方案是一个匿名函数传递给setTimeout

setTimeout(function() { changeFontColor(obj, m + 1); }, 50); 

顺便说一句,这是没有必要使用each如果你正在做的是荷兰国际集团bind; bind已经绑定到jQuery对象中的每个元素。由于obj已经是jQuery对象,所以在changeFontColor中做$(obj)也是没有必要的。

+0

thx,它现在工作正常。 – CharlieShi