document.ready里面的函数不起作用

时间:2015-03-08 12:15:49

标签: javascript jquery

我有以下功能:

$(document).ready(function(){
 function fav(type){
    switch(type){
        case "radius":if(radius_fav.indexOf(rad)== -1){
                        radius_fav.push(rad);
                         }
                         break;
        case  "transform":if(transform_fav.indexOf(final_transformation) == -1){transform_fav.push(final_transformation);}
                            break;
        default:if(bshadow !== none && box_fav.indexOf(bshadow) == -1){box_fav.push(bshadow);}  
                        break;                              
    }
    }//end of switch statement


});

在$(document).ready()里面。除非把它放在document.ready()之外,否则这个函数不会工作。有什么想法吗?包含html页面中的Jquery标签 安慰:  未捕获的ReferenceError:未定义fav

1 个答案:

答案 0 :(得分:10)

  

我有以下功能......在$(document).ready()里面。除非把它放在document.ready()之外,否则这个函数不会工作。有什么想法吗?

听起来你正在调用onXyz属性中的函数,如下所示:

<div onclick="fav('radius')">...</div>

以这种方式调用的函数必须是 globals ,但是当你在ready回调中声明函数时,它不是全局的,它的作用域是ready回调。

最好避免创建全局变量,这是不使用onXyz属性进行事件连接的原因之一。代替:

<div id="radius">...</div>

...然后在ready

$("#radius").on("click", function() {
    fav('radius');
});

......或类似的。

您不必全部提供这些id,事实上您可能可以为其中的几个使用相同的处理程序。例如:

<div class="control" data-type="radius">...</div>
<div class="control" data-type="transform">...</div>
<!-- ... -->

然后

$(".control").on("click", function() {
    fav(this.getAttribute("data-type"));
    // Or:
    // fav($(this).attr("data-type"));
    // But not .data(), that's for something else, not for just accessing data-* attributes
});

请注意,在大多数情况下,您根本不需要ready功能。只需在文档末尾放置一个内联调用的函数表达式,就在结束</body>标记之前:

<script>
(function() {
    $(".control").on("click", function() {
        fav(this.getAttribute("data-type"));
        // Or:
        // fav($(this).attr("data-type"));
        // But not .data(), that's for something else, not for just accessing data-* attributes
    });
})();
</script>
</body>
</html>

如果您无法控制ready代码的位置,那么您真的只需要一个script处理程序。