2012-10-18 239 views
-1

我想在用戶點擊一個按鈕時調用一個JS函數。但是onclick事件並未被解僱。開發工具顯示我下面的錯誤:javascript 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'); 
    } 

任何sugges怎麼辦?

+0

將'type =「button」'添加到'

+0

什麼都沒有。即使在我的

+0

廢話......應該說'type =「submit」' –

回答

-1

這工作

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

可以離開按鈕,因爲它是....

<button dojoType = "xwt.widget.form.TextButton" id = "pingButton" baseClass = "defaultButton" onclick = "onPing();">Ping</button> 
+0

這並不解決問題,但提供了不同的解決方案。代碼導致錯誤,這就是他需要修復的問題。 –

+0

@RyanWheale對不起。我會認爲這沒有什麼區別...... –

+0

不需要道歉。我討厭下調':(' - 但是當一個解決方案不是爲了解決問題的目的,那麼我認爲這是社區的責任,你能解釋爲什麼你的答案可能導致他找到解決方案嗎? –

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,值爲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