首页 > 解决方案 > JavaScript 函数默认参数值

问题描述

我正在尝试为函数参数设置默认值,它将向我的服务器查询初始值。

最终目标是我将能够单击我创建的列表项之一来检索并创建一个新列表。

<script type="text/javascript">
        $(function getJobs(jobid=0) {
            {#jobid = 0;#}
            console.log("jobid: " + jobid);
            let query = {id: jobid};
            console.log(query);
            $.getJSON("{% url 'website:get-jobs' %}", query, function (data) {
                console.log("getjson");
                $.each(data, function (key, value) {
                    console.log(key + " - " + value);
                    $('#jobs-list').append("<li id='" + key + "'" + "href='#'" + "onclick=getJobs(key)" + ">" + value + "</li>");
                });
            });

        })
</script>

如果我手动将 jobid 设置为 0(在上面的代码中注释掉)一切正常。如果我尝试在函数参数列表中设置它,我会在我的 console.log 中得到它: jobid: function(e,t){return new w.fn.init(e,t)}

标签: javascriptjqueryfunctionparameters

解决方案


当 jQuery 调用回调时$(function(x) { ... }),参数是 jQuery 对象本身,因此永远不需要默认值

所以,你会想要这样做

$(function() {
    function getJobs(jobid = 0) {
        console.log("jobid: " + jobid);
        let query = {id: jobid};
        console.log(query);
        $.getJSON("{% url 'website:get-jobs' %}", query, function (data) {
            console.log("getjson");
            $.each(data, function (key, value) {
                console.log(key + " - " + value);
                $('#jobs-list').append("<li id='" + key + "'" + "href='#'" + "onclick=getJobs(key)" + ">" + value + "</li>");
            });
        });
    }
    getJobs();
});

或者,使用您的原始代码,您当然可以测试 typeof jobid 是一个函数的情况,并将其设置为0......即

$(function getJobs(jobid) {
    if (typeof jobid === 'function') {
        jobid = 0;
    }
    console.log("jobid: " + jobid);
    let query = {id: jobid};
    console.log(query);
    $.getJSON("{% url 'website:get-jobs' %}", query, function (data) {
        console.log("getjson");
        $.each(data, function (key, value) {
            console.log(key + " - " + value);
            $('#jobs-list').append("<li id='" + key + "'" + "href='#'" + "onclick=getJobs(key)" + ">" + value + "</li>");
        });
    });
});

推荐阅读