我试图在用户点击按钮时调用JS函数。但onclick事件并没有被解雇。开发人员工具向我显示以下错误:
执行错误:
function (/*Event*/ e){
// summary:
// Handler when the user activates the button portion.
if(this._onClick(e) === false){ // returning nothing is same as true
e.preventDefault(); // needed for checkbox
}else if(this.type == "submit" && !this.focusNode.form){ // see if a nonform widget needs to be signalled
for(var node=this.domNode; node.parentNode/*#5935*/; node=node.parentNode){
var widget=dijit.byNode(node);
if(widget && typeof widget._onSubmit == "function"){
widget._onSubmit(e);
break;
}
}
}
}
ReferenceError
arguments: Array[1]
get message: function () { [native code] }
get stack: function () { [native code] }
set message: function () { [native code] }
set stack: function () { [native code] }
type: "not_defined"
__proto__: Error
这是我的代码:
HTML
<td>
<button dojoType = "xwt.widget.form.TextButton" id = "pingButton" baseClass = "defaultButton" onclick = "onPing();">Ping
</button>
</td>
JS:
onPing : function() {
alert('works');
}
有关该怎么做的任何建议?
答案 0 :(得分:2)
我将向OP及其他人解释他遇到问题的原因,而不是继续采取一个相当冲突的反对表格线程。
问题1: OP未发布所有相关代码。 OP对于OOP和SO来说显然都是新的,他做出的假设更少的致命错误更多。我们可以看到有onPing
函数,它是冒号:
语法的对象的一部分。如果他要发布他的所有代码,他的javascript看起来像这样:
var myObject = {
onPing: function() {
alert("works");
}
};
这里应该注意,我不确定他的对象的名称是什么。我使用了名称myObject
,以便在此处暗示“您的对象名称”。
问题2:有一个onLlick函数,它是用一个按钮内联定义的。这不是一个好的做法,可能会导致错误......尤其是在封闭内部编写了许多剪切和粘贴的javascript片段时:
(function() {
/*
This is an example of closure.
Any variables/objects/functions defined in here are not accessible to the outside world
*/
})();
问题3:代码似乎依赖于值为type
的属性submit
。因此,按钮应该设置该属性:
<button type = "submit" dojoType = "xwt.widget.form.TextButton" id = "pingButton" baseClass = "defaultButton" onclick = "onPing();">Ping</button>
虽然快速而肮脏的解决方案可能是声明一个名为onPing
的全局函数,但这可能会导致其他库出现问题,使代码更难以维护,并且只是简单的“不良做法”,并且永远不应该鼓励。因此,让我们探索一个更好的解决方案,它将执行以下操作:
这里......
<button type="submit" dojoType="xwt.widget.form.TextButton" id="pingButton" baseClass="defaultButton">Ping</button>
<script>
(function() {
var myObject = {
onPing: function() {
alert("works");
}
};
document.getElementById('pingButton').onclick = myObject.onPing;
}());
</script>
为了超级好,我们加入jsfiddle。
答案 1 :(得分:-1)
这有效
function onPing() {
alert("this");
}
可以保留按钮....
<button dojoType = "xwt.widget.form.TextButton" id = "pingButton" baseClass = "defaultButton" onclick = "onPing();">Ping</button>