繁体   English   中英

javascript命名空间TypeError:blah不是函数

[英]javascript namespacing TypeError: blah is not a function

我有一个html文件javascript文件和jquery。

在javascript中我有一个命名空间函数,在返回一个带有我想从外面调用的函数的对象。 这是为了创建“公共”和“私人”功能。

在HTML中我想触发返回对象中的这个函数。 但它不承认它。 在控制台中我收到此错误:

TypeError:BATCH.SendSMS.uploadFiles不是函数

它应该工作,我以前做过,所以我一定做错了。 你能来看看:

HTML:

<!DOCTYPE html>
<html>
<head>
    <title>Batch SMS</title>
    <style media="all" type="text/css">
        @import url("main.css");
    </style>

    <script type="text/javascript" src="./js/batchsms.js"></script>
</head>
<body>

<form enctype="multipart/form-data" id="upload-form">
    <div id="fields">

        <div>
            <span>Sender: </span>
            <select id="sender">
                <option value="">Maak keuze</option>
                <option value="Sender1">Sender 1</option>
                <option value="Sender2">Sender 2</option>
                <option value="Sender3">Sender 3</option>
            </select>
        </div>


        <div>
            <span>Phone file:</span>
            <input id="phone" name="phone" type="file">
        </div>

        <div>
            <span>Appointment file:</span>
            <input id="appointment" name="appointment" type="file">
        </div>

        <div>
            <span></span>
            <input type="button" value="Upload Files" onclick="BATCH.SendSMS.uploadFiles();">
        </div>

    </div>
</form>

</body>
</html>

JS:

var BATCH = BATCH || {};
BATCH.SendSMS = function() {

    var error = "";

    var setError = function() {
        $('#main').prepend($('<div>').append(error));
    };

    return {
        uploadFiles: function() {

            var formData = new FormData($('form')[0]);

            //start ajax request
            $.ajax({
                type: "POST",
                url: "php/upload.php",

                 data: formData,
                 dataType: "json",

                 success: function(data) {
                     console.log(data);
                 },

                 error: function(data){
                     console.log(data);
                 },

                 cache: false,
                 contentType: false,
                 processData: false
             });

         }
     };

}

你需要BATCH.SendSMS().uploadFiles()

这是因为BATCH.SendSMS是一个使用uploadFiles函数返回对象的函数,而不是对象本身。

我找到了更好的解决方案。

我应该把功能归还给自己。

例:

BATCH.SendSMS = function() {

    //do stuff here

}();

最后一个'()'将确保我可以打电话:

BATCH.SendSMS.uploadFiles()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM