2014-09-24 6 views
0

다음은 js 파일과 두 div입니다. 왜 html2 doesn'work인지 이해할 수 없지만 "sendMessage Is Not"가 표시됩니다. 누군가 나에게 그것을 설명 할 수 있습니다 ... 또는 단지 설명 할 수있는 링크.Javascript jquery onready 외부에서 함수가 정의되지 않았습니다.

감사

$(function() { 

     var WS = window['MozWebSocket'] ? MozWebSocket : WebSocket 

     var wsUrl = jsRoutes.controllers.P2.connect().absoluteURL(); 
     wsUrl = wsUrl.replace("http", "ws"); 

     var p2Socket = new WS(wsUrl) 

     var sendMessage = function() { 
      p2Socket.send(JSON.stringify(
       {text: "HI"} 
      )) 

     } 

      $("#buttonHi").click(function() { 
      sendMessage() 
      }); 
    }); 

function sendMessageOutside(){ 
     sendMessage(); 
} 

및 HTML 1 ...

<div id="p2-console" style="border: 1px solid;"> 
    <button id="buttonHi" >Interact</button> 
</div> 

와 HTML이 ...

<div id="p2-console" style="border: 1px solid;"> 
    <button id="buttonHi" onclick="sendMessageOutside()">Interact</button> 
</div> 
+1

"document.ready"내에'sendMessageOutside()'도 넣고 적절한 이벤트 연결 기술을 사용하십시오. 이렇게하면 모든 전역을 피할 수 있습니다. – Teemu

+1

범위 이외의 것 –

+1

가장 간단한 해결 방법은'var sendMessage = function() {'을'window.sendMessage = function() {'로 바꾼다는 것입니다. 그러면 그냥 작동 할 것입니다. – Archer

답변

2

당신은 '그것을 할 수 JQuery와 함수 내에서 로컬 sendMessage 첨부를 정의 sendMessageOutside() 함수에 의해 해당 범위 외부에서 볼 수 있습니다. sendmessage를 전역 변수로 정의한 다음 다시 시도해야합니다.

var sendmessage; 
    $(function() { 

     var WS = window['MozWebSocket'] ? MozWebSocket : WebSocket 

     var wsUrl = jsRoutes.controllers.P2.connect().absoluteURL(); 
     wsUrl = wsUrl.replace("http", "ws"); 

     var p2Socket = new WS(wsUrl) 

      sendMessage = function() { 
      p2Socket.send(JSON.stringify(
       {text: "HI"} 
      )) 

     } 

      $("#buttonHi").click(function() { 
      sendMessage() 
      }); 
    }); 

function sendMessageOutside(){ 
     sendMessage(); 
} 
+1

그게 문제에 대한 좋은 설명입니다. 글로벌 범위에서 기능을 생성하므로 최상의 솔루션입니다. 더 나은 방법은 코드의 이벤트에 함수를 연결하는 것이라고 생각합니다. – GolezTrol

+0

그게 좋을지도 .. – brso05

관련 문제