所以我遇到了javascript对象的问题,并访问了实例化中的函数。这是我在主代码中得到的内容。我实例化一个IFU对象。在该对象的初始化中,我实例化一个Dapqa对象并将其分配给一个变量ifu.dapqa = new Dapqa()。我在表单上有一个提交按钮,该按钮绑定到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中的一个锚点来调用它,例如
<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>
这部分代码工作得很好。所以我不明白为什么定义了一个函数而另一个函数没有定义。有什么想法吗?
更新 这似乎是我的按钮的问题。我尝试了一个锚点,它似乎工作。
<a type='button' class='btn btn-primary btn-lg' id='daptestsubmit' onclick='ifu.dapqa.addComments("submit")'>TestSubmit</a>
我不知道为什么。知道为什么锚点工作而不是按钮?我正在使用Boostrap 3.3.2。
答案 0 :(得分:0)
也许您应该更改脚本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>