所以我在使用javascript对象以及在实例化内部访问函数时遇到了问题。这就是我的主要代码。我实例化了一个IFU对象。在该对象的初始化内部,我实例化了一个Dapqa对象,并将其分配给变量ifu.dapqa = new Dapqa()。我在绑定(bind)到功能addComments onclick的表单上有一个提交按钮。此函数是我的Dapqa对象的一部分。

<script type="text/javascript" src="static/js/ifu.js"></script>
<script type="text/javascript" src="static/js/dapqa.js"></script>
<script type='type/javascript'>
  var ifu = {};
  $(function() {
    var ifuid = $('.galinfo').attr('id');
    ifu = new Ifu(ifuid);
    ifu.print();
    ifu.dapqa.print();
    ifu.dapqa.addComments('submit'); //test
  });
</script>

<body>
   <button type='button' class='btn btn-primary btn-lg' id='dapqasubmit' onclick='ifu.dapqa.addComments("submit")'>Submit</button>
</body>

然后,我通过在每个类中运行一些测试打印功能来检查事物。我还在测试对Dapqa对象上的函数addComments的调用。这个功能看起来像
Dapqa.prototype.addComments = function(action) {
    console.log('adding comments',action);
};

当我加载页面时,控制台输出对我来说看起来不错。
We are now printing ifu  9101
We are now printing dapqa info:  9101 sampletab
adding comments submit

但是,当我单击表单上的“提交”按钮时,出现错误
TypeError: ifu.dapqa is undefined

现在,我想我通过将ifu声明为全局变量来解决此问题,然后在页面完成加载后填充它,但显然不是。奇怪的是,对于我的Dapqa对象中的另一个函数,这工作得很好。我有一个单独的功能
 Dapqa.prototype.loadImageModal = function(img) {
    var src = $('#'+img).attr('src');
    var name = src.slice(src.search('manga-'));
    this.imagemodaltitle.html(name);
    var image = '<img class="img-responsive img-rounded" src="'+src+'" alt="Image"/>';
    this.imagemodalbody.html(image);
};

而且我也从html中的 anchor 调用此代码,例如
<a href='#' data-toggle='modal' data-target='#dapimgmodal_9101' onclick='ifu.dapqa.loadImageModal("mapsimgs1_9101")'><img src="" class="img-responsive img-rounded" id='mapsimg1_9101' alt="Image"></a>

这部分代码工作正常。因此,我不明白为什么定义了一个函数却没有定义另一个函数。有什么想法吗?

更新
我的按钮似乎有问题。我尝试了一个 anchor ,它似乎工作。
<a type='button' class='btn btn-primary btn-lg' id='daptestsubmit' onclick='ifu.dapqa.addComments("submit")'>TestSubmit</a>

我不知道为什么。知道 anchor 为什么起作用但按钮不起作用吗?我正在使用Boostrap 3.3.2。

最佳答案

也许您应该更改脚本ifu.js和dapqa.js声明的顺序。由于dapqa.js显然依赖ifu.js,因此应首先像这样加载它:

<script type="text/javascript" src="static/js/dapqa.js"></script>
<script type="text/javascript" src="static/js/ifu.js"></script>

10-05 20:33