2014-09-17 2 views
2

этот код дает мне ошибку при подаче его формирования «неопределенные не является функцией в строке 21», и я не знаю, почемуJQuery толчок() возвращает ошибку «неопределенные не является функцией»

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

$("form[name=dForm]").submit(function(ev){ 
     ev.preventDefault(); 
     var data = $(this).serializeObject(); 
     data.push({name:"bonjour",value:bonjour}); 

// do something here ... 

}) 

или он должен быть массивом, а не объектом?

+0

выглядит как данные объекта, а не массив .. – Shashank

+0

толчок функция Javascipt. Не из jQuery –

+0

да, и я не знаю, как сделать это в массиве. потому что у меня есть несколько форм с одним и тем же селектором – deception

ответ

3

serializeObject возвращает o, который определен в верхней части функции как {}.

push - это метод объектов Array, а не простых объектов. Он помещает элемент в конец массива.

Обычные объекты неупорядочены. Не существует «конца» для включения элемента, поэтому нет смысла использовать метод push.

Вы, по-видимому, хотите просто создать новое свойство с заданным именем и значением.

data.push({name:"bonjour",value:bonjour}); 

должен быть

data.bonjour = bonjour; 
+0

data.bonjour вернется undefined, если данные не содержат этого имени ... – Shashank

+0

@Shashank - Что это имеет к чему-либо? Речь идет о присвоении нового значения, а не чтении существующего. – Quentin

+0

спасибо, он работает – deception

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