1

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

         }
     };

}
4

2 回答 2

3

你会想要BATCH.SendSMS().uploadFiles()的。

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

于 2013-06-28T12:12:17.720 回答
0

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

我应该把函数还给它自己。

例子:

BATCH.SendSMS = function() {

    //do stuff here

}();

最后一个 '()' 将确保我可以调用:

BATCH.SendSMS.uploadFiles()

于 2013-07-01T07:36:08.257 回答