javascript onclick没有按下按钮点击

时间:2012-10-18 21:02:38

标签: javascript onclick dojo event-handling event-binding

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

有关该怎么做的任何建议?

2 个答案:

答案 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>