jquery脚本仅适用于firefox

时间:2013-12-05 00:34:13

标签: javascript php jquery

在我的第一个简单的网站/数据库上辛苦工作了2周后,我被困住了。我的朋友帮助我添加jquery,但现在它只适用于Mozilla,他不知道为什么。我根本不懂java(而且几乎不知道php)。你能看看吗?

Chrome控制台指出错误

Uncaught SyntaxError: Unexpected token = 

第49行

self.dataAdapter = function(id = 0, imie = '', nazwisko = '', kredyt = 0)

你知道什么是最兼容的语法吗?

整个剧本:

$(document).ready(function()
{
    sui = new swiezakUI();
    sui.getData();
});

function swiezakUI() 
{
    var self = this;
    self.scriptURL = "/data.php";

    self.send = function(key, stuff)
    {
        var post = {};
        post[key] = JSON.stringify(stuff);

        $.ajax({
            type: "POST",
            url: self.scriptURL,
            data: post,
            contentType: "application/x-www-form-urlencoded",
            dataType: "json",
            success: function(data)
            {
                self.getData();
                self.cleanForm();
            },
            failure: function(errMsg)
            {
                alert('fail');
            },
            error: function(errMsg)
            {
                alert("Blad \n" + errMsg.responseText);
            }
        });     
    }

    self.id2Id = function(id)
    {
        for(var i = 0; i < self.myData.length; i++)
        {
            if(id == self.myData[i].id) 
                return i;
        }
    }

    self.dataAdapter = function(id = 0, imie = '', nazwisko = '', kredyt = 0)
    {
        var data = new Object();
        data.id = id;
        data.imie = imie;
        data.nazwisko = nazwisko;
        data.kredyt = kredyt;
        return data;
    }

    self.dodajNowy = function()
    {
        return function()
        {
            var data = self.dataAdapter(null, $('#imie').val(), $('#nazwisko').val(), $('#kredyt').val().replace(/\D+/g,""));
            self.send('nowy',data);
        }
    }

    self.edytujWpis = function(id)
    {
        return function()
        {
            var data = self.dataAdapter(id, $('#imie').val(), $('#nazwisko').val(), $('#kredyt').val().replace(/\D+/g,""));
            self.send('edycja',data);
        }
    }

    self.kasujWpis = function(id)
    {
        return function()
        {
            var data = self.dataAdapter(id);
            self.send('kasuj',data);
        }
    }

    self.cleanForm = function()
    {
        $('#imie').val('');
        $('#nazwisko').val('');
        $('#kredyt').val('');
        $('#bZapisz').unbind();
        $('#bZapisz').click(self.dodajNowy());
    }

    self.editButtons = function()
    {
        $('.edit').click(function()
        {   
            var did = $(this).attr('id').replace(/\D+/g,"");
            id = self.id2Id(did);
            $('#imie').val(self.myData[id].imie);
            $('#nazwisko').val(self.myData[id].nazwisko);
            $('#kredyt').val(self.myData[id].kredyt);
            $('#bZapisz').unbind();
            $('#bZapisz').click(self.edytujWpis(did));          
        });
    }

    self.delButtons = function()
    {
        $('.delete').click(function()
        {
            var id = $(this).attr('id').replace(/\D+/g,"");
            console.log(id);
            self.kasujWpis(id)();
        });
    }

    $('#bZapisz').click(self.dodajNowy());

    $('#bCzysc').click(function(){
        self.cleanForm();
    });

    self.getData = function()
    {
        $('#lista').children('table').html("<tr><th>id</th><th>imie</th><th>nazwisko</th><th>kredyt</th>"+ 
            "<th>edycja</th><th>usun</th></tr>");
        $.getJSON(self.scriptURL, function(data)
        {           
            console.log(data);
            self.myData = data;

            for(var i = 0; i < data.length; i++)
            {
                $('#lista').children('table').append(
                    '<tr><td>'+ data[i].id +'</td>'+
                    '<td>'+ data[i].imie +'</td>'+
                    '<td>'+ data[i].nazwisko +'</td>'+
                    '<td>'+ data[i].kredyt +'</td>'+
                    '<td><button class="edit" id="e#'+data[i].id+'">e</button></td>'+
                    '<td><button class="delete" id="d#'+data[i].id+'">d</button></td></tr>');
            }

            self.editButtons();
            self.delButtons();
        });
    }
}

1 个答案:

答案 0 :(得分:2)

Default parameters目前是ES6 draft的一部分。此功能不是最新的最终ECMAScript标准(5.1)的一部分,因此browser support目前是最小的。在撰写本文时,只有Firefox(通过实验方式)实现了默认参数。

有许多方法可以模拟默认参数。 ES6默认参数的替代方法是比较arg === undefined以设置默认值:

//if the kredyt argument has not been passed or is undefined
if (kredyt === undefined) {
   kredyt = 0;
}

当调用函数传递的参数少于其参数count时,没有相应参数的参数初始化为undefined

这样,不传递参数的值以及显式传递undefined作为参数值将使用默认参数值,与ES6的默认参数相同。

所以这是完整的例子:

self.dataAdapter = function(id, imie, nazwisko, kredyt)
{
    //default parameters
    if (id === undefined) {
        id = 0;
    }
    if (imie === undefined) {
        imie = '';
    }
    if (nazwisko === undefined) {
        nazwisko = '';
    }
    if (kredyt === undefined) {
        kredyt = 0;
    }

    //function code
    var data = new Object();
    data.id = id;
    data.imie = imie;
    data.nazwisko = nazwisko;
    data.kredyt = kredyt;
    return data;
}

另一种常见方法是比较arg == null,它具有相同的效果,但也接受传递null以使用默认参数值:

//if kredyt is null, undefined or not passed
if (kredyt == null) {
   kredyt = 0;
}

这是有效的,因为==会输入强制,而null会强制执行undefinedES5#11.9.3)。


另一种常见方法是使用||作为“默认运算符”(请参阅​​related question):

kredyt = kredyt || 0; //in the beginning of the function
//...
data.kredyt = kredyt;

或者如果参数仅在一个地方使用,也可以内联它:

data.kredyt = kredyt || 0;

好处基本上是更短的代码,但请注意,它不仅会在参数为undefined时使用默认参数值,还会使用nullfalse,{{1} },空字符串或0。因此,当其中一个值是与其默认参数值不同的可接受参数值时,这不是一种可行的方法。


最后,对于需要区分NaN / null值与未传递参数的用例(这种情况很少而且不是这里的情况),可以检查{{3} object的arguments属性:

undefined