2012-10-18 4 views
-1

사용자가 버튼을 클릭 할 때 JS 함수를 호출하려고합니다. 그러나 onclick 이벤트는 해고되지 않습니다.javascript onclick이 버튼 클릭으로 실행되지 않음

오류가 실행 :

HTML

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

JS :

onPing : function() { 
     alert('works'); 
    } 

모든

다음
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 

내 코드 개발자 도구는 나에게 다음과 같은 오류를 보여줍니다 sugges 무엇을해야 하는가?

+0

코드가'type' 속성을 검사 할 때'

+0

아무 것도. 내

+0

쓰레기 ... 'type = "submit"이라고 말 했어야했습니다. –

답변

-1

이 오히려 뱅 머리에 대한 테이블 스레드를 계속 대신에 ....

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

이는 문제를 해결하지는 않지만 다른 해결책을 제공합니다. 코드가 오류를 일으키고 있으며, 이것이 바로 고쳐야 할 필요가있는 것입니다. –

+0

@RyanWheale 죄송합니다. 나는 그것이 작은 차이를 만들 것이라고 생각했을 것이다 ... –

+0

사과 할 필요가 없다. 나는 downvoting을 싫어한다. ('- 그러나 해결책이 문제를 해결하려고하지 않을 때, 나는 그것을 알리는 것이 커뮤니티의 의무라고 느낀다. 당신의 대답이 왜 그를 해결책으로 이끌 수 있는지 설명해 주시겠습니까? –

2

그대로

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

버튼을 떠날 수 작동, 나는 모두 설명 할 것 OP와 다른 사람들이 왜 문제를 겪고 있는지.

문제 1 : OP가 관련 코드를 모두 게시하지 않았습니다. OP는 OOP와 SO 모두에게 분명히 새로운 것이었고 그는 더 적은 것으로 추측하는 치명적인 오류를 만들었습니다. 콜론 : 구문에 따라 개체의 일부인 onPing 함수가 있음을 알 수 있습니다. 그는 자신의 모든 코드를 게시 할 수 있다면, 자신의 자바 스크립트는 다음과 같이 보일 것입니다 :

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

그것은 내가 그 개체의 이름이 무엇인지 확실하지 오전 여기에 주목해야한다. 나는 이라는 이름을 사용하여 "여기에 당신의 물체 이름"을 암시합니다..

문제점 2 : 버튼이있는 인라인으로 정의 된 onclick 기능이 있습니다. 이것은 많은 잘라 내기 및 붙여 넣기 자바 스크립트 조각 폐쇄의 내부에 작성된 특히 ... 좋은 방법이 아닙니다 버그로 이어질 수 : 코드 속성에 의존 나타납니다 : 3

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

문제 값이 submittype. 따라서 버튼이 속성 세트가 있어야합니다 신속하고 더러운 솔루션 onPing라는 전역 함수를 선언 할 수도 있지만

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

, 이것은 다른 라이브러리에 문제가 발생할 수 있습니다를, 코드를 더 어렵게 유지하게되며, 그냥 평범한 '나쁜 습관과 절대 권장해서는 안됩니다.그래서 다음을 수행하는 더 나은 솔루션을 탐색 할 수 있습니다 :

  • 보기 전체 작업 코드
  • 바인딩 이벤트 코드를 폐쇄 내의 개체 정의를 다음

간다 인라인하지 ...

<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을 포함합니다.

관련 문제