Подтвердить что ты не робот

Правильное использование jquery $(document).ready() при объявлении функций, вызванных в ready()

Я привык начинать jquery-кодирование с помощью готовой функции $(function(){...}); и ставить все готовые функции из готовых.

Тогда я понял, что некоторые функции, помещенные в готовые функции, вероятно, не обязательно должны быть там.

Например, простые функции, используемые событиями в готовом документе, могут быть объявлены вне его:

function checkEmail(objelement){
   var emailRx = /^([\w-\.][email protected]([\w-]+\.)+[\w-]{2,4})?$/;
   return emailRx.test(objelement.val()) ? true : false;
}

Затем используется внутри него:

//code snippet for example

$(function(){

$("form[name='contactform']").submit(function(){
    $("input[type=text]").each(function(){
        if($(this).attr("id") == "email" && !checkEmail($(this))) { 
            $(this).prev().css("color","red");
       }
    });
});

});

Я просмотрел много предыдущих предыдущих вопросов и, похоже, не нашел ответа.

Является ли это лучше, хуже или не отличается, чтобы объявлять функции за пределами готового таким образом?

4b9b3361

Ответ 1

Если вы объявляете их снаружи, все это означает, что они существуют в глобальной области.

Преимущество этого заключается в том, что они могут использоваться повторно вне функции document.ready. Недостатком является то, что они загромождают глобальное пространство имен (этого можно избежать, если захотите).

Лично, если я собираюсь их повторно использовать, они выходят на улицу. Если им нужно ссылаться на переменную или что-то еще, что будет только в рамках моего обработчика domready, они войдут внутрь (обычно как анонимные функции).

В последнее время я помещаю все, что могу, кроме обработчика domready, просто потому, что интерпретатор должен анализировать все объявления функций внутри обработчика domready, прежде чем приступать к выполнению обработчика и отсрочить выполнение вашего обработчика domready. (независимо от того, насколько незначительно это время).

Ответ 2

лучше

Ваш код будет легче читать.

Помните, что $(document).ready() - это тоже функция.

Все, что может быть упаковано и помещено в потенциально повторно используемый вызов функции, должно быть.

Подумайте об этом так: не могли бы вы сделать то же самое, если бы вы имели дело с событием нажатия кнопки?

Ответ 3

функции всегда должны быть объявлены вне готового или любого события загрузки. Но вы должны убедиться, что функции объявлены до их использования во избежание ошибок при выполнении кода.