-1

当用户单击按钮时,我试图调用 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');
    }

关于做什么的任何建议?

4

2 回答 2

2

我将向 OP 和其他人解释他为什么会遇到问题,而不是继续一个相当猛烈的反对表线程。

问题 1: OP 没有发布所有相关代码。OP 对于 OOP 和 SO 来说显然都是新的,他犯了一个致命的错误,即假设少即是多。我们可以看到,根据冒号语法,有一个onPing函数是对象的一部分。:如果他要发布他的所有代码,他的 javascript 将如下所示:

var myObject = {
    onPing: function() {
        alert("works");
    }
};

这里需要注意的是,我不确定他的对象的名称是什么。我使用这个名称myObject是为了暗示“您的对象名称”

问题 2:有一个与按钮内联定义的 onclick 函数。这不是好的做法,可能会导致错误......尤其是当在闭包内编写如此多的剪切和粘贴 javascript 片段时:

(function() {
    /* 
    This is an example of closure.  
    Any variables/objects/functions defined in here are not accessible to the outside world 
    */
})();

问题 3:代码似乎依赖于type具有 value的属性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

于 2012-10-19T02:09:28.287 回答
-1

这有效

function onPing() {
        alert("this");
    }

可以按原样离开按钮....

<button dojoType = "xwt.widget.form.TextButton" id = "pingButton" baseClass = "defaultButton" onclick = "onPing();">Ping</button>
于 2012-10-18T21:13:26.393 回答