2015-03-08 6 views
0

У меня есть следующие функции:.функция внутри document.ready не будет работать

$(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 


}); 

Внутри $ (документ) .ready() Эта функция не будет работать, если она не помещается снаружи document.ready (?) .Any идеи Jquery тег в HTML странице включена CONSOLE: Uncaught ReferenceError: избры не определены

+1

Итак, почему вы хотите поместить его в псевдо-готовый обработчик? Я думаю, вы столкнулись с проблемой объема, проверьте консоль на наличие ошибок –

ответ

9

I have the following function...Inside $(document).ready().This function won't work unless it is put outside document.ready().Any ideas?

это звучит, как вы вызываете функцию из атрибута onXyz, как это:

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

функция называется таким образом, должна быть Глобал, но при объявлении функции внутри ready обратного вызова, это не является глобальным, он распространяется до ready обратного вызова.

Лучше всего избегать создания глобалов, что является одной из причин не использовать атрибуты onXyz для подключения событий. Вместо этого:

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

..., а затем в ready:

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

... или аналогичный.

Вам не обязательно указывать эти id s, и на самом деле вы можете использовать один и тот же обработчик для нескольких из них. например:

<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 теги идут.

Смежные вопросы