2014-10-13 4 views
1

저는 학교 과제물로 JavaScript로 Battleship 게임을 만들려고 노력해 왔으며 상대방 AI를 만들려고 노력하고 있습니다.JavaScript fireEvent가 함수가 아니십니까?

yourCell.setAttribute('id', evt + String(a) + String(b)); 
addListener(yourCell); 
:

지금
function addListener(evt) { 
    evt.addEventListener('click', function(){ 
     //bunch of code 
    }); 
} 

나는이 기능 addListener 내가 루프 내 중첩에 그리드의 새로운 셀을 만들 때마다 실행 : 나는 그리드에서 셀을 클릭 할 때의 이벤트를 만들었습니다

는 내가 지금 원하는 것은 내가 내 차례를했습니다 때 클릭 이벤트를 실행하는 상대입니다, 그래서이 그냥 fireEvent 기능을 테스트하기 위해 쓴 : t에 따르면

function enemyTurn() { 
    document.getElementById('yourGrid00').fireEvent('onclick'); 
} 

을 그는 두 번째 코드 예제에서 셀의 ID를 'yourGrid00'으로 설정했습니다.이 코드는 JavaScript 코드가 실행 된 후 html 코드를 검사하여 확인한 것으로, 각 셀이 만들어지고 ID가 할당되기 전에 실행되지 않습니다 (enemyTurn()). . 이해가 안 무엇

내가 fireEvent 줄에 다음과 같은 오류를 얻을 수 있습니다 :

Uncaught TypeError: undefined is not a function.

사람이 내가 잘못 알고 있나요?

답변

0

fireEvent은 Internet Explorer 버전 8 이하에서만 지원되는 정말 오래된 방법입니다. 최신 브라우저를 처리하려면 dispatchEvent을 대신 사용해야합니다. 그냥 dispatchEvent('onclick')를 호출 할 수 없습니다 -

Dispatches an Event at the specified EventTarget , invoking the affected EventListeners in the appropriate order. The normal event processing rules (including the capturing and optional bubbling phase) apply to events dispatched manually with dispatchEvent() .

는 수동 비록 Event 만들어야합니다. 나는 this answer에서 다음 코드의 첫 번째 비트를 꺼냈다.

var evt = document.createEvent("MouseEvents"); 
evt.initMouseEvent("click", true, true, window, 1, 0, 0, 0, 0, 
    false, false, false, false, 0, null); 

function enemyTurn() { 
    document.getElementById('yourGrid00').dispatchEvent(evt); 
} 

JSFiddle demo.

+0

고맙습니다. 이것은 작동하는 것 같다 :) 나는 단지 클릭을 시뮬레이트하는 방법을 찾고 있었는데 fireEvent를 발견하고 문서가 여전히 사용 중이라고 생각했다. –

+0

initMouseEvent의 모든 속성에 대한 거래가 무엇인지 설명하는 데주의해야합니까? –

+0

@ TorsteinR 쏘우크 이들은 마우스 이벤트가 무엇인지, 이벤트가 발생한 곳과 몇 가지 다른 세부 사항을 설정합니다. MDN에는 https://developer.mozilla.org/en-US/docs/Web/API/event.initMouseEvent에 대한 문서가 있습니다. 'event.initMouseEvent (type, canBubble, cancelable, view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget);' –

관련 문제