jQuery .serializeObject不是一个函数 - 仅在Firefox中

时间:2012-01-17 19:35:02

标签: jquery firefox

我正在使用jQuery,特别是这个函数

$("#postStatus").serializeObject();

它在Chrome和Safari中运行得非常好,但是当我在Firefox中使用它时它不起作用。我使用Firebug来查看它给出了什么错误,我得到了这个

$("#postStatus").serializeObject is not a function

为什么这个功能在Firefox中不起作用?

... UPDATE

哦,是的,我完全忘记了它不是核心功能。我记得我搜索了一种方法来序列化表格并找到了这个解决方案;

$.fn.serializeObject = function()
{
   var o = {};
   var a = this.serializeArray();
   $.each(a, function() {
       if (o[this.name]) {
           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;
};

我已经设法通过将上面的函数放在JS文件的顶部来解决这个问题。谢谢你的帮助。

3 个答案:

答案 0 :(得分:6)

AFAIK jQuery在其核心中没有定义为serializeObject的功能。可能你正在使用插件,并且它在Firefox中存在问题,因此可以安全地假设你的脚本包含正确,尝试在准备好的处理程序中包装你的代码

$(function(e){
$("#postStatus").serializeObject();
});

或者您可以将javascript放在页面底部。

DEMO

答案 1 :(得分:0)

您可能还想查看https://github.com/citnvillareal/serializeObject

样本使用

<form>
    <input type="text" name="txt01[][name]" value="Text 01" />
    <input type="text" name="txt01[][phone]" value="000001" />

    <input type="text" name="txt01[][name]" value="Text 02" />
    <input type="text" name="txt01[][phone]" value="000002" />

    <input type="submit" value="Submit" />
</form>

<script>
    ( function( $){
        $( document ).ready( function(){
            $( "form" ).submit( function( e ) {
                e.preventDefault();

                var jsonObject = $( this ).serializeObject();
                console.log( jsonObject );
            } );
        } );
    } )( jQuery );
</script>

控制台输出

Object 
{
    txt01: Array(2) 
    {
        0: Object
        {
            name: Text 01
            phone: 000001
        },

        1: Object
        {
            name: Text 02
            phone: 000002
        }
    }
}

有关详情click here

答案 2 :(得分:0)

尝试serialize()或serializeArray()而不是serializeObject()