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

时间:2013-06-28 12:09:34

标签: javascript namespaces

我有一个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
             });

         }
     };

}

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

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

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

示例:

BATCH.SendSMS = function() {

    //do stuff here

}();

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

BATCH.SendSMS.uploadFiles()