【发布时间】:2009-12-10 21:17:08
【问题描述】:
我从这个问题开始:Multiple Javascript gadgets per page。在阅读了如何构建 jQuery 插件之后,我通过将 JS 对象包装在
中,将我的 OO JavaScript 对象修改为 jQuery 插件(function {} { /*my object code*/ }(jQuery))
并添加一个
function createMyGadget() { return new myObject }
在我的对象中。我现在可以通过执行以下操作在一个页面上成功显示两个小工具:
<div id="foo"></div>
<div id="bar"></div>
<script language="JavaScript">
$("#foo").createMyGadget({ title: "My First Gadget"});
$("#bar").createMyGadget({ title: "My Second Gadget"});
</script>
作为createMyGadget() 函数的一部分,我创建了一个具有唯一ID (gadgetUID) 的新div,将一堆HTML、按钮、imgs 等写入该div,然后将该div 附加到@987654327 @ 和 #bar。效果很好。
在我的 HTML 中,我有一个“下一步”按钮,它需要调用 JavaScript 对象中定义的 goNext() 函数。如何在该对象中引用该函数?我试过了
onClick='$("#foo").goNext()'
和
onClick='$("#gadgetUID").goNext()'
以及我能想到的所有其他排列。 Firebug 总是以错误消息“...不是函数”作为响应。
附录:这是我对 johnnyheadphones 的回复:
我一直在尝试从 jQuery 内部做同样的事情,结果相同,例如'...不是函数'。这是实际的函数调用:
displayGadget : function() {
var myString = "\
<div id=\""+this.gadgetId+"\" >\
<div id=\"gadget_header\">\
<h1 id=\"title\">"+this.options.title+"</h1>\
</div>\
<div id='loading' style=''><img src='images/loading2.gif' /></div> \
<div id=\"gadget_body\"></div>\
<div id=\"gadget_footer\">\
<div id=\"searchAsset\">\
</div>\
<div id=\"pageControls\">\
<img id=\"goPreviousIcon\" src=\"images/go-previous.png\">\
<img id=\"goNextIcon\" src=\"images/go-next.png\">\
<input type=\"button\" value=\"Next\" />\
</div>\
</div> \
\
</div>\
<div id=\"debugInfo\"></div>\
<script type=\"text/javascript\"> \
</script>\
";
$("#"+this.gadgetContainerID).html(myString);
$('input[value="Next"]','#'+this.gadgetContainerID).click(function() {
$('#'+this.gadgetId).pageData(1);
});
}
当我重新加载并单击下一步按钮时,Firebug 说“$('#'+this.gadgetId).pageData(1) 不是函数”。
顺便说一句,我最初想使用 goNextIcon 执行此操作,但将其更改为按钮,以便我可以复制/粘贴您的代码。
我开始认为我还有其他问题,这只是一个奇怪的副产品。
附录:我发现了问题:我是个白痴(但我的任何 xGF 都可以告诉你)。
我在有问题的元素上调用 pageData()。元素上没有 pageData() 函数;它在“this”对象上。一旦我指向正确的(也是唯一的)pageData() 对象(附加到“this”),它就可以像宣传的那样工作。
现在开始做一些代码清理。
【问题讨论】:
-
将最后一条错误消息读取为“...pageData(1) 不是函数”。你真的打算调用“pageData”方法吗?它只是没有定义。
标签: javascript jquery jquery-plugins jquery-events