Функция JQuery не будет работать, если объявлен за пределами документа

У нас есть простая функция JQuery, которая сериализует входные данные формы и объявляется вне $(document).ready()

(function( $ ){
   $.fn.serializeObject = function() {
     var formObj = {};
     var a = this.serializeArray();
     $.each(a, function() {
       if (formObj[this.name] !== undefined) {
         if (!formObj[this.name].push) {
           formObj[this.name] = [formObj[this.name]];
         }
         formObj[this.name].push(this.value || '');
       } else {
         formObj[this.name] = this.value || '';
       }
     });
     return formObj;
   };
})( jQuery );

Мы использовали эту функцию много раз, и ее вызывают при подаче формы:

$(document).ready(function(){

  $('#test').submit(function(){
      var vars = $(this).serializeObject();
      console.log(vars);
      return false;
  });

});

Это ВСЕГДА работает, но мы работаем над новым проектом, и мы получаем следующую ошибку:

Uncaught TypeError: $ (...). SerializeObject не является функцией

Вот скрипка

В новом проекте он работает только в том случае, если функция serializeObject внутри документа готова

$(document).ready(function(){

 (function( $ ){
   $.fn.serializeObject = function() {
     var formObj = {};
     var a = this.serializeArray();
     $.each(a, function() {
       if (formObj[this.name] !== undefined) {
         if (!formObj[this.name].push) {
           formObj[this.name] = [formObj[this.name]];
         }
         formObj[this.name].push(this.value || '');
       } else {
         formObj[this.name] = this.value || '';
       }
     });
     return formObj;
   };
  })( jQuery );

  $('#test').submit(function(){
      var vars = $(this).serializeObject();
      console.log(vars);
      return false;
  });

});

Мы используем ту же версию JQuery и других внешних библиотек. Есть идеи? благодаря

javascript,jquery,function,scope,

-2

Ответов: 1


2 принят

Вы включили jQuery более одного раза, и вот что происходит. Это также может «удалить» плагины.

  1. Вы включаете jQuery
  2. Вы определяете свою функцию и присоединяете ее к функции / объекту jQuery.
  3. Вы снова включаете jQuery. Этот новый jQuery НЕ включает функцию, которую вы подключили к другому экземпляру jQuery.
JavaScript, JQuery, функции, область применения,
Похожие вопросы